Error wegen (falschem) Initialisieren eines Objektes

TJ22

Grünschnabel
Hi!

Ich bin absoluter in Java, und meine Frage ist etwas elementar, aber destotrotz konnte ich leider per Google keine Ergebnisse erzielen.

Die Funktion Primzahlen.returnArray() soll alle Primzahlen bis zu einer bestimmten Zahl berechnen und in ein Array laden. Ich weiß dass mein Programm ein absoluter RAM-Killer ist und es bestimmt viel einfacher geht, ich möchte aber eher daran lernen als ein konkretes Programm zu erzielen.
Beim ersten Durchlauf der Schleife [1] wird nur die Anzahl der Primzahlen mithilfe der Variablen counter gezählt, damit beim zweiten Durchlauf das Array-Objekt initialisiert werden kann (hier: [2]).

Code:
public class Primzahlen {
  public static int[] returnArray(int max) {
    int counter = 0;   
    int[] prim;                                  
    for(int goingThru = 1; goingThru <= 2; goingThru++) {    // 1
      if (goingThru == 2) {                            // 2
        prim = new int[counter];
        counter = 0;                                   
      }
      for(int i = 1; i <= max;i++) {                 
        inside:
        for(int j = 1; j <= i;j++) {                 
          if (j != 1 && i != j && i % j == 0) {       
            break inside;                               
          }                                        
          if (i == j) {
            if (goingThru == 2) {             
              prim[counter] = i;             
            }
            counter++;                                    
          }
        }
      }
    }
    return prim;                                     
  }
}

Beim Compilen kommt folgende Fehlermeldung:

Code:
Primzahlen.java:18: variable prim might not have been initialized
              prim[counter] = i;
Primzahlen.java:25: variable prim might not have been initialized
    return prim;

Dabei wurde die Variable doch beim zweiten durchlauf bei [2] initialisiert... was mache ich falsch?
Bitte nicht sauer sein falls es was triviales ist - hab bis jetzt nur in PHP gearbeitet und kann mich immer noch nicht richtig an das OOP gewöhnen... mal hoffen das kommt mit der Zeit.

Danke, TJ.
 
das Problem ist folgendes

Code:
if (goingThru == 2) {                            // 2
        prim = new int[counter];
        counter = 0;                                   
      }

Du Initialisierst das Array nur wenn goingThru == 2 ist.
In allen anderen Fällen nicht.
Das sieht dein Compiler, denkt mit und hat Angst :-)

Zu Lösen ist das Ganze dadurch, dass du dein Array möglichst leer einfach schon mal definierst:

Code:
int[] prim = new int[0];

Damit ist es immer initialisiert - und dein Compiler meckert nicht. Natürlich solltest du später auch überprüfen, ob in deinem Array überhaupt was drinnen steht...
 
Danke vielmals, das Prob ist gelöst... der Java-Compiler filtert wirklich gründlich alle möglichen Fehler, die nur auftreten könnten. Find ich ganz gut, obwohl mir das jetzt zu schaffen gegeben hat^^
 
Zurück