Archief - [Java] Probleem met oefening priemgetallen printen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

scorpken

Legacy Member
Ne maat van mij heeft hier opt forum geen account dus vraagt aan mij of ik zijn oefening niet ffkes kan posten, hij graakt er zelf echt niet aan uit.
De oefening:

Code:
public class PriemGetallen {

    public static void main(String[] args) {
        int ondergrens;
        int bovengrens;
        ondergrens = 0;
        bovengrens = 100;

        bepaalPriemgetallen(ondergrens, bovengrens);

    }

    private static void bepaalPriemgetallen(int ondergrens, int bovengrens) {
        int i = 0;
        int x = i-1;
        int restwaarde = i % (x);
        boolean priemgetal = true;
            
        for (i = ondergrens; i <= bovengrens; ++i) {

            if (i == 0 || i == 1) {
                priemgetal = false;
                System.out.println(i + "is geen priemgetal");
            } else {

                for (;;--x) {
                                          
                    if (restwaarde == 0) {
                        System.out.println(i + "is een priemgetal");
                    } else {
                        System.out.println(i + "is geen priemgetal");
                    }
                }
            }
        }
    }
}

Mij lijkt het in elk geval dat hij teveel accolades sluit.
maar ken zelf niks van java.

Cyberkef

Legacy Member
for (;;--x) {

if (restwaarde == 0) {
System.out.println(i + "is een priemgetal");
} else {
System.out.println(i + "is geen priemgetal");
}
}

Volgens mij zit hij hierbij in een oneindige lus waarbij hij voor eeuwig en altijd ééntje zal aftrekken van x en dezelfde print maken...

forloRn_

Legacy Member
Niks mis met de accolades maar het algoritme is verkeerd.

Code:
for (;;--x)
is een oneindige lus, priemgetal wordt gezet maar nergens uitgelezen. Ik neem aan dat hij gewoon alle mogelijke delers afgaat en kijkt of de rest bij deling 0 oplevert. In dat geval is
Code:
                  if (restwaarde == 0) {
                        System.out.println(i + "is een priemgetal");
                    } else {
                        System.out.println(i + "is geen priemgetal");
ook verkeerd want het is juist een priemgetal als de rest bij deling níet 0 is.

Code:
public class PriemGetallen {

	public static void main(String[] args) {
		int ondergrens;
		int bovengrens;
		ondergrens = 0;
		bovengrens = 10;

		bepaalPriemgetallen(ondergrens, bovengrens);

	}

	private static void bepaalPriemgetallen(int ondergrens, int bovengrens) {
		for (int i = ondergrens; i <= bovengrens; ++i) {

			if (i == 0 || i == 1) {
				System.out.println(i + " is geen priemgetal");
			} else {
				boolean priemgetal = true;

				for (int x = 2; x < i && priemgetal; x++) {
					int restwaarde = i % x;

					if (restwaarde == 0) {
						priemgetal = false;
					}
				}

				System.out.println(priemgetal ? (i + " is een priemgetal"): (i + " is geen priemgetal"));
			}
		}
	}
}

Gurdt

Legacy Member
Dit is wat ik zou schrijven als oplossing
de functie bepaalPriemgetallen print voor alle getallen tussen de ondergrens en de bovengrens uit of het al dan niet een priemgetal is.
De functie gaat als volgt:

een getal is een priemgetal als het groter is dan 1 en als het buiten zichzelf en 1 geen delers heeft
alle mogelijke delers bevinden zich dus tussen 2 en de vierkantswortel van het getal (maar bij gebrek aan die wortelfunctie zoeken we tussen 2 en het getal/2, we nemen het een beetje te ruim)

we gaan dus voor ieder getal, alle mogelijke delers af, en als het getal 1 deler heeft, is het GEEN priemgetal!

Code:
public class PriemGetallen {
  public static void main(String[] args) {
    int ondergrens = 0;
    int bovengrens = 100;
    
    bepaalPriemgetallen(ondergrens, bovengrens);
  }
  
  private static void bepaalPriemgetallen(int ondergrens, int bovengrens) {
    for ( int i = ondergrens; i <= bovengrens; i++ ) {
      boolean isPriem = true;
      
      //delers afgaan
      if ( i <= 1 )
        isPriem = false;
      else {
        for ( int j = 2; j <= i/2 && isPriem; j++)
          if ( i % j == 0)
            isPriem = false;
      }
      
      //output verzorgen
      if( isPriem )
        System.out.println( i + " is een priemgetal");
      else
        System.out.println( i + " is GEEN priemgetal");
    }
  }
}
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan