• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

liczby pierwsze w javie z tablicą

Object Storage Arubacloud
0 głosów
503 wizyt
pytanie zadane 29 listopada 2020 w Java przez zuzannaruda Nowicjusz (240 p.)

Dzień dobry,

Zależy mi żeby ktoś sprawdził prosty program sprawdzający czy jest to liczba pierwsza. Wymyśliłam sobie żeby to była tablica liczb pierwszych. Program działa błędnie ponieważ przy zmianie liczb w tablicy pokazuje błędne liczby.

TAK, TAK, TAK, NIE,TAK

Nie wiem skąd to NIE skoro liczby są wszystkie pierwszymi. Wklejam kod, proszę o pomoc:


public class Main {

    public static void main(String[] args) {
	// write your code here
        int[] isPrimeNumber = new int[] {3,11,1,7};

        for(int i = 0; i < isPrimeNumber.length ; i++) {

            //System.out.println(isPrimeNumber[i]);

             if(isPrimeNumber[i] < 2){
                System.out.println("NIE");
            }
            else{
                 for (int j = 2; j <isPrimeNumber[i]/2 ; j++) {
                     if(isPrimeNumber[i]%j==0){
                         System.out.println("NIE");
                                              }
                     else{
                         System.out.println("TAK");
                     }
                 }
            }

        }
        

    }
}

 

komentarz 29 listopada 2020 przez tkz Nałogowiec (42,000 p.)
Dlaczego dzielisz przez dwa?
komentarz 29 listopada 2020 przez zuzannaruda Nowicjusz (240 p.)
Zasugerowałam się innym rozwiązaniem podobnego problemu. Jeżeli tego nie robię to otrzymuję dużo więcej TAK, ale to chyba nie to dzielenie jest problemem. Jak powinny wyglądać warunki?
komentarz 29 listopada 2020 przez tkz Nałogowiec (42,000 p.)
public class Main {
 
    public static void main(String[] args) {
    // write your code here
        int[] isPrimeNumber = new int[] {3,11,1,7,4,6,2,7,19};
 
        for(int i = 0; i < isPrimeNumber.length ; i++) {
 
            //System.out.println(isPrimeNumber[i]);
 
             if(isPrimeNumber[i] < 2){
                System.out.println("NIE");
            }
            else{
                 for (int j = 2; j <isPrimeNumber[i]/2 ; j++) {
                     if(isPrimeNumber[i]%j==0){
                        System.out.println("NIE");
                        break;
                     }
                 }
              System.out.println("TAK");

            }
 
        }
         
 
    }
}

Tylko formatowanie popraw.

komentarz 29 listopada 2020 przez zuzannaruda Nowicjusz (240 p.)
Dziękuję!

Poprawiłam i działa.
komentarz 29 listopada 2020 przez Wiciorny Ekspert (270,590 p.)
edycja 29 listopada 2020 przez Wiciorny

@tkz, 6 nie jest liczbą pierwszą :) więc program nie działa poprawnie, więc dla parzystych program jest niepoprawny, ten program tez dla 9 cyfr zwraca 10 wyników dla 19-stu beda dwa sprawdzenia bo int zaokrągli do 9ciu, a iteracji w J bendą dwie, bo pierwszy wnik bedzie "tak" więc break nie przerwie pętli. 
 

komentarz 29 listopada 2020 przez tkz Nałogowiec (42,000 p.)

Faktycznie, masz rację, moje niedopatrzenie. 
 

public class Main {
  public static boolean isPrime(int n) {
       if (n <= 1) {
           return false;
       }
       for (int i = 2; i < Math.sqrt(n); i++) {
           if (n % i == 0) {
               return false;
           }
       }
       return true;
    }
    public static void main(String[] args) {
        int[] numbers = new int[] {3,11,1,7,4,6,2,7,19};
        for(var i: numbers){
            System.out.println(isPrime(i));
        }
    }
}

 

komentarz 30 listopada 2020 przez zuzannaruda Nowicjusz (240 p.)

Dziękuję za inne rozwiązanie, też je przetestuję. Ja swój kod poprawiłam tak jak niżej i też działa poprawnie.


public class Main {

    public static void main(String[] args) {
	// write your code here
        int[] isPrimeNumber = new int[] {3,11,1,7,4,6,5,8,13};

        for(int i = 0; i < isPrimeNumber.length ; i++) {

            //System.out.println(isPrimeNumber[i]);

             if(isPrimeNumber[i] < 2){
                System.out.println("NIE");
            }
            else{
                 for (int j = 2; j<isPrimeNumber[i] ; j++) {
                     if(isPrimeNumber[i]%j==0){
                         System.out.println("NIE");
						 break;
					}
					else if(isPrimeNumber[i]%j!=0){System.out.println("TAK");
					break;
					}
                }
			
            }
        }

    }
        

}

 

komentarz 30 listopada 2020 przez Wiciorny Ekspert (270,590 p.)

@tkz, nie napisałem tego jako niedopatrzenie twoje, ale po prostu zwrócić uwagę, że  rozwiązanie koleżanki jest niepoprawne w miare i nakierowac na poprawę. A wiadomo nie dajemy gotowców, więc też  nie oczekiwałem, że to zaimplementujesz. :) Cheers

komentarz 30 listopada 2020 przez Wiciorny Ekspert (270,590 p.)
Zuzanno, 2 jest liczbą pierwszą :) twój program zwróci NIE dla tego przypadku, więc nie jest kompletny.
komentarz 30 listopada 2020 przez zuzannaruda Nowicjusz (240 p.)
edycja 30 listopada 2020 przez zuzannaruda

dodałam warunek:

else if(isPrimeNumber[i]==2){
				System.out.println("TAK");

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 251 wizyt
pytanie zadane 1 listopada 2022 w Java przez Magic19921057 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 1,138 wizyt
0 głosów
1 odpowiedź 1,013 wizyt
pytanie zadane 10 stycznia 2019 w Java przez krawiecki Początkujący (490 p.)

92,615 zapytań

141,465 odpowiedzi

319,782 komentarzy

61,997 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...