Bewaar priemgetallen in gedeeltelijke array

Ik probeer alle priemgetallen 1-100 op te slaan in een gedeeltelijke array en het resultaat vervolgens af te drukken.

Ik moet ze op verschillende manieren hebben.

Ik denk dat ik heb uitgezocht hoe ik moet weten of een getal priemgetal is, maar niet hoe ik dat nummer terug moet zetten naar de hoofdmethode om in een array te worden opgeslagen.

Hier is mijn code tot nu toe:

Belangrijkste methode:

public static void main (String[] args) throws IOException {
    int[] primeArray = new int[25];
    primeArray[0] =2;
    int numPrimes = 1;
    boolean prime;
    int currNumber;

    for(currNumber=3; currNumber<=100; currNumber++) {
        prime= isPrime(currNumber,primeArray,numPrimes);

        if(prime=true) {
            primeArray[numPrimes]=currNumber;
            numPrimes++;

            if (numPrimes==25)
                break;
        }

        System.out.println(primeArray[numPrimes]);
    }
}

isPrime-methode:

public static boolean isPrime (int currNum, int [] primeArray,int numPrimes) {  
    boolean prime=true;

    for(int i=0; i

Elk advies zou worden gewaardeerd; super verward op dit moment.

0
Wat bedoel je met een "partial array"?
toegevoegd de auteur Jesper, de bron
Dit is geen antwoord op de vraag, maar u wilt misschien kijken naar de zeef van Eratosthenes: en. wikipedia.org/wiki/Sieve_of_Eratosthenes
toegevoegd de auteur Stuart Golodetz, de bron
Waarom moet je "het nummer terugsturen naar de hoofdmethode" als je het al hebt in de vorm van currNumber ?
toegevoegd de auteur Toomai, de bron
Ik zou de isPrime handtekening veranderen in public static boolean isPrime (int number) .
toegevoegd de auteur Bhesh Gurung, de bron
Slechts een tip noem niet uw variabelen prime , vooral als ze booleans zijn, zoals: isPrime die ons vertelt dat de waarde van deze variabele kan ofwel waar/onwaar zijn. Gemakkelijker te lezen voor andere programmeurs. Als je het als prime bewaart, zou iemand kunnen aannemen dat je door naar je code te kijken, de waarde van prime precies dat een priemgetal is.
toegevoegd de auteur JonH, de bron

3 antwoord

Een paar dingen mis met je code. In de hoofdmethode geeft u currNum door aan de methodeaanroep isPrime() . Die variabele bestaat niet, je code zou niet moeten compileren. U wilt currNumber doorgeven aan die methodeaanroep. Het tweede is dat uw if -instructie de boolean "prime" toekent in true, en niet controleert. Het zou gewoon if (prime) moeten zijn.

In uw methode isPrime() kunt u een pauze; toevoegen aan de prime-controle, want als het deelbaar is door een cijfer, is het niet priem, hoeft u de rest van de delers:

    if(currNum%primeArray[i]==0) {
        prime = false;
        break;
    }

Aangezien u itereert via de prime array, moet de for-lus stoppen op het aantal prime-waarden, niet op het huidige aantal:

for(int i=0; i
0
toegevoegd
Controleer de uitzondering om te zien uit welk regelnummer u die uitzondering krijgt. Maar zonder dat te weten, zou ik denken dat het komt omdat je primeArray [] slechts 25 int's kan bevatten, terwijl er meer dan 25 priemgetallen zijn tussen 1 en 100. Dus maak die array groter of stop als je heb 25 prime-lenzen gevonden.
toegevoegd de auteur Jon Lin, de bron
U moet een code schrijven om elk van de priemgetallen in de array af te drukken, System.out.print (primeArray [numPrimes]) werkt niet.
toegevoegd de auteur Jon Lin, de bron
Sorry, verkeerd gelezen. U moet dat wijzigen in System.out.print (primeArray [numPrimes-1]); omdat u numPrimes hebt verhoogd.
toegevoegd de auteur Jon Lin, de bron
Ik zou ook nog een voorwaarde toevoegen: currNum/2 <= primeArray [i] . Het heeft geen zin priemgetallen te controleren die groter zijn dan de helft van het huidige aantal.
toegevoegd de auteur Igor Nikolaev, de bron
Ik heb mijn code hierboven bijgewerkt .. het compileert prima, maar nu krijg ik een ArrayIndexOutofBounds-foutmelding. Ik begrijp waarom, maar niet hoe het te repareren.
toegevoegd de auteur brandonscott, de bron
Dat is logisch, ik stopte het toen ik 25 prime-lenzen kreeg. Nu wil ik de array afdrukken, dus ik print "System.out.print (primeArray [numPrimes]);" Correct? Ik doe dit, maar het drukt gewoon alle 0's uit.
toegevoegd de auteur brandonscott, de bron
Zou je aanraden om alleen een lus te gebruiken? Ik heb geprobeerd de Arrays.toString (array) te gebruiken en het lijkt niet te doen wat ik zoek. Moet ik een lus gebruiken? looping van 1-25?
toegevoegd de auteur brandonscott, de bron

Ik zou de isPrime handtekening als public static boolean isPrime (int number) veranderen en het zodanig definiëren dat het een getal zou aannemen en waar/onwaar zou retourneren op basis van of het nummer is primen of niet.

public static boolean isPrime(int number) {
    if(number < 2) {
        return false;
    } else if(number < 4) {
        return true;
    }

    for(int i=2; i<=number/2; i++) {
        if(number % i == 0) {
            return false;
        }
    }
    return true;
}
0
toegevoegd
Dat lijkt gemakkelijker, maar dit is de manier waarop mij werd gevraagd om het te doen.
toegevoegd de auteur brandonscott, de bron

Je doet het redelijk goed, ik zie meteen een paar fouten:

  1. if (prime = true) moet zijn (prime == true) of voor booleans gebruik je normaal gesproken alleen de expressie, bijv. if (prime)

  2. Controleer de lus waar je naar primehood zoekt. x% 1 is altijd 0;)

0
toegevoegd