• 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ą

VPS Starter Arubacloud
0 głosów
555 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,020 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,020 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 (277,460 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,020 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 (277,460 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 (277,460 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 278 wizyt
pytanie zadane 1 listopada 2022 w Java przez Magic19921057 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 1,296 wizyt
0 głosów
1 odpowiedź 1,217 wizyt
pytanie zadane 10 stycznia 2019 w Java przez krawiecki Początkujący (490 p.)

93,015 zapytań

141,978 odpowiedzi

321,271 komentarzy

62,358 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...