Int wird als Null ausgegeben

Jiscona

Mitglied
Hallo,
ich habe ein Programm zum Ermitteln und abspeichern von Primzahlen geschrieben:
Code:
public class PrimeExample{   
       public static void main(String args[]){
    int anzahl = 1000;
       for (int j = 1;j < anzahl;++j) {
      int i,number; 
      int primzahl = 0;   
      int n=j;
      int nummer =0;  
      number= j/2;
      int prime[] = new int[anzahl];    
        for(i=2;i<=number;i++){     
          if(n%i==0){           
          primzahl = 1;     
          break;     
          }
        }      
      if(primzahl == 0)  {
        prime[nummer] = n;
        ++nummer;
      }//end of else
     
      System.out.println(prime[100]);
    } // end of for
             }
  }

Wenn ich schreibe System.out.println(n) funktioniert das aus, aber jetzt werden statt der 100. Primzahl nur sehr viele Nullen untereinander ausgegeben (Das System.out.println(prime[100]); dient nur als Beispiel, um einen Wert auszugeben). Woran liegt das?

VG und Danke im Voraus.
 
Die Ausgabe ist in der Schleife. Und so lange die 100te Primzahl nicht berechnet ist, ist der Wert da halt 0.

Verschiebe die Ausgabe hinter die Schleife.
 
Bei
Code:
public class PrimeExample{    
       public static void main(String args[]){
    int anzahl = 1000;
    int zahl = InOut.readInt("Zahl: ");
       for (int j = 1;j < anzahl;++j) {
      int i,number;  
      int primzahl = 0;    
      int n=j;
      int nummer =0;   
      number= j/2;
      int prime[] = new int[anzahl];     
        for(i=2;i<=number;i++){      
          if(n%i==0){            
          primzahl = 1;      
          break;      
          } 
        }       
      if(primzahl == 0)  {
        prime[nummer] = n;
        ++nummer;
      }//end of else
      } // end of for
    System.out.println(prime[100]);
  }
}
kommt allerdings:
Code:
PrimeExample.java:26:24: error: cannot find symbol
    System.out.println(prime[100]);
 
Weil du das Array in der Schleife definiert hast. Das muss natürlich auch vor die äußere Schleife.
 
Das heißt so?:
Code:
for (int l=0;0 < 1000;++l) {
      System.out.println(prime[l]);
    } // end of for
Dann kommt aber die Fehlermeldung:
Code:
PrimeExample.java:24:26: error: cannot find symbol
      System.out.println(prime[l]);
 

Variablen haben einen Gültigkeitsbereich.
Java:
for (int i; i < 10; i++) {
    int value = i; // Variable value wird hier deklariert
  
} // hier endet der Gültigkeitsbereich und sie wird wieder zerstört

// anderes Beispiel:

void someMethod() {

    // irgendwelcher Code

    int value = 0; // Variable wird hier deklariert

    for (int i; i < 10; i++) {
        value = i;
    }

    // mehr Code

} // hier endet der Gültigkeitsbereich und sie wird wieder zerstört
 
Also die Frage ist doch, was Du genau machen willst. Evtl. willst Du das erst einmal formulieren, ehe Du Code schreibst.

Aber bei Deinem Code einfach einmal ein paar Anmerkungen:
- Das int prime[] = new int[anzahl]; betrachtest Du einfach als "Nehmen eines Zettels mit Platz für anzahl Zahlen, Wenn Du den Zettel nimmst, dann sind alle Plätze mit 0 belegt.
- Wenn Du einen Block hast, dann sind alle Variablen die Du da drin deklarierst am Ende des Blockes weg. Also {, 'Zettel nehmen'. und bei '}' landen die genommenen Zettel im Müll.

Also was hast Du bisher gemacht?
Schleife:
- In der Schleife nimmst Du einen Zettel für die vielen Zahlen.
- Dann berechnest Du irgendwas und das Ergebnis landet an i-ter Stelle auf dem Zettel.
- Dann schaust Du auf die letzte Position und gibst die Zahl aus, die da steht.
- Dann schmeisst Du den Zettel weg.

Also:
1. ten Zettel nehmen, an 1.te Stelle etwas berechnetes hin schreiben, letzte Zahl auf Zettel ausgeben (=> 0)
2. ten Zettel nehmen, an 2.te Stelle etwas berechnetes hin schreiben, letzte Zahl auf Zettel ausgeben (=> 0)
...

Vermutlich willst Du:
- erst EINEN Zettel für die ganzen Ergebnisse nehmen.
- dann die Schleife durchlaufen um den Zettel zu füllen
- dann nach der Schleife das Ergebnis ausgeben.
Aber das muss im Detail ausformuliert werden. Was willst Du wie genau machen? Mal es Dir auf einem Zettel auf und spiel es durch. Das ist das, was ich nur jedem raten kann.
 

Neue Themen


Zurück
Oben