2016-04-21 4 views
0

So habe ich ein Problem mit meinem Array mit einer Reihe von NULLEN zurück, obwohl ich die If-Anweisung den SoftballPlayer Obj nicht zulassen, wenn es! = Null ... .und mein Array ist durch 24 begrenzt, so dass es für die größeren Dateien funktioniert, aber trotzdem Nullen zurückgibt, wenn die Dateieingabe kleiner ist als mein Max von 24? [MAX_PLAYERS = 24 MAX_EXCLUDED = 30]Nullen zurückgeben: java.lang.ArrayIndexOutOfBoundsException bekommen: 5

public int getPlayerCount() { 
     return playerCount; 
    } 

    public void setPlayerCount(int playerCountIn) { 
     playerCount = playerCountIn; 
    } 

public void playerReadFile(String fileNameIn) throws IOException { 
    Scanner scanFile = new Scanner(new File(fileNameIn)); 
    teamName = ""; 
    String number = ""; 
    String name = ""; 
    String position = ""; 
    double specializationFactor = 0.0; 
    double battingAvg = 0.0; 
    double outfielderFieldingAvg = 0.0; 
    double infielderFieldingAvg = 0.0; 
    int wins = 0; 
    int losses = 0; 
    double era = 0.0; 
    int saves = 0; 

    teamName = scanFile.nextLine();  
    while (scanFile.hasNext()) { 
    String playerLine = scanFile.nextLine(); 
    Scanner scan = new Scanner(playerLine); 
    scan.useDelimiter(","); 
    char i = scan.next().charAt(0); 
    number = scan.next(); 
    name = scan.next(); 
    position = scan.next(); 
    specializationFactor = Double.parseDouble(scan.next()); 
    battingAvg = Double.parseDouble(scan.next()); 

    if (playerCount < MAX_PLAYERS) { 
     switch (i) { 

      case 'O': 
       outfielderFieldingAvg = Double.parseDouble(scan.next()); 
       Outfielder out = new Outfielder(number, name, position, 
       specializationFactor, battingAvg, outfielderFieldingAvg); 
       if (out != null) { 
       roster[playerCount] = out; 
       playerCount++; 
       } 
       break; 

      case 'I': 
       infielderFieldingAvg = Double.parseDouble(scan.next()); 
       Infielder inf = new Infielder(number, name, position, 
       specializationFactor, battingAvg, infielderFieldingAvg); 
       if (inf != null) { 
       roster[playerCount] = inf; 
       playerCount++; 
       } 
       break; 

      case 'P': 
       wins = Integer.parseInt(scan.next()); 
       losses = Integer.parseInt(scan.next()); 
       era = Double.parseDouble(scan.next()); 
       Pitcher pit = new Pitcher(number, name, position, 
       specializationFactor, battingAvg, wins, 
       losses, era); 
       if (pit != null) { 
       roster[playerCount] = pit; 
       playerCount++; 
       } 
       break; 

      case 'R': 
       wins = Integer.parseInt(scan.next()); 
       losses = Integer.parseInt(scan.next()); 
       era = Double.parseDouble(scan.next()); 
        saves = Integer.parseInt(scan.next()); 
        ReliefPitcher rpit = new ReliefPitcher(number, name, position, 
        specializationFactor, battingAvg, wins, 
        losses, era, saves); 
        if (rpit != null) { 
        roster[playerCount] = rpit; 
        playerCount++; 
        } 
        break; 

       default: 
        if (excludedCount < MAX_EXCLUDED) { 
        excludedRecords[excludedCount] = playerLine; 
        excludedCount++; 
        } 
        break; 
      } 
     } 
     else if (excludedCount < MAX_EXCLUDED) { 
      excludedRecords[excludedCount] = playerLine; 
      excludedCount++; 
     }   
     } 



    } 
+0

Wo ist '' 'playerCount''' initialisiert - und welchen Wert? – sics

+0

Was hat eine Beschreibung von max. 24 oder max. 30 zu tun mit der Fehlermeldung, dass 5 out-of-bounds ist? Ich sehe keine Beschreibung, welche Zeile den Fehler verursacht (show full stacktrace), und ich sehe keinen Code, der Arrays deklariert und zuordnet. Wie können wir also versuchen, Ihnen zu helfen? – Andreas

Antwort

0

Ich vermute, dass, wenn Sie nicht genügend Einträge in der Datei haben Sie Ihr Array zu füllen, die anderen Elemente nicht initialisiert werden bleiben. Wenn Sie darauf verweisen, wird ein Null-Fehler verursacht.

Verwenden Sie stattdessen eine Liste (http://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html), mit der Sie beliebig viele Elemente hinzufügen können, egal ob groß oder klein.

Wenn Sie ein Array verwenden müssen, müssen Sie die Anzahl der Elemente speichern, die Sie eingefügt haben. Etwas wie dieses:

int numItems = 0; 
while (scanFile.hasNext()) { 
numItems++; 
//use your existing code to insert items into the array 
} 

Und dann sollte numItems die Anzahl der Elemente im Array haben. Um es zu durchlaufen:

+0

Das klingt wie ein Kommentar, keine Antwort. – Andreas

+0

wir können ArrayList nicht verwenden .... wir müssen Arrays verwenden –

+0

@JGraspAllStars Wenn Sie Arrays verwenden müssen, behalten Sie die Anzahl der Elemente bei, die Sie in Ihr Array eingegeben haben. Wenn Sie dann das Array durchlaufen, führen Sie eine Schleife durch, bis Sie diese Anzahl erreicht haben und nicht mehr bis zum Ende des Arrays. – nhouser9

Verwandte Themen