2016-11-08 4 views
0

Ich habe eine Aufgabe, wo ich in einer Datei mit Informationen über Hurrikane von 1980 bis 2006 lesen muss. Ich kann nicht herausfinden, was der Fehler ist. Ich habe einen Abschnitt von Code wie folgt:java.util.InputMismatchException; null (in java.util.Scanner)

import java.util.Scanner; 
import java.io.File; 
import java.io.IOException; 

public class Hurricanes2 
{ 
public static void main(String[] args)throws IOException 
{ 
    //declare and initialize variables 


    int arrayLength = 59; 
    int [] year = new int[arrayLength]; 
    String [] month = new String[arrayLength]; 



    File fileName = new File("hurcdata2.txt"); 
    Scanner inFile = new Scanner(fileName); 

    //INPUT - read data in from the file 
    int index = 0; 
    while (inFile.hasNext()) { 
     year[index] = inFile.nextInt(); 
     month[index] = inFile.next(); 
    } 
    inFile.close(); 

Das ist nur der erste Teil. Aber im Abschnitt mit der while-Anweisung gibt es einen Fehler mit der year[index] = inFile.nextInt(). Ich habe keine Ahnung was der Fehler bedeutet und ich brauche Hilfe. Danke im Voraus.

Antwort

0

Versuchen Sie, Index ++ als letzte Zeile Ihrer while-Schleife hinzuzufügen. Wie es jetzt ist, erhöhen Sie es nie, also füllen Sie nur die ersten Zahlen in Ihrem Array aus und ersetzen sie.

+0

ich dies und es versucht, änderte den Fehler nicht. Danke, dass du versucht hast zu helfen. –

0

Ich persönlich würde nicht verwenden Scanner() sondern Files.readAllLines(). Es könnte einfacher sein, es zu implementieren, wenn es ein begrenzendes Zeichen gibt, um die Hurrikan-Daten zu teilen.

Zum Beispiel lassen Sie uns sagen, dass Ihre Textdatei ist dies:

1996, August, 1998, September, 1997, October, 2001, April...

Sie können folgendes tun, wenn diese Annahmen halte ich gemacht habe wahr:

Path path = Paths.get("hurcdata2.txt"); 
String hurricaineData = Files.readAllLines(path); 

int yearIndex = 0; 
int monthIndex = 0; 

// Splits the string on a delimiter defined as: zero or more whitespace, 
// a literal comma, zero or more whitespace 
for(String value : hurricaineData.split("\\s*,\\s*")) 
{ 
    String integerRegex = "^[1-9]\d*$"; 
    if(value.matches(integerRegex)) 
    { 
     year[yearIndex++] = value; 
    } 
    else 
    { 
     month[monthIndex++] = value; 
    } 
} 
Verwandte Themen