2013-10-24 1 views
0

컴파일러 오류가 발생하지 않지만 프로그램을 실행하고 case1, 메서드 lesFraFil()을 실행하려고하면이 오류 메시지가 표시됩니다.스레드 "main"의 예외 java.lang.NumberFormatException : 입력 문자열의 경우 :;

Exception in thread "main" java.lang.NumberFormatException: For input string: "; 
" 
     at java.lang.NumberFormatException.forInputString(Unknown Source) 
     at java.lang.Integer.parseInt(Unknown Source) 
     at java.lang.Integer.parseInt(Unknown Source) 
     at Hybelhus.lesFraFil(Oblig4.java:63) 
     at Hybelhus.oversikt(Oblig4.java:134) 
     at Hybelhus.meny(Oblig4.java:107) 
     at Oblig4.main(Oblig4.java:23) 

내 모든 친구들을 요청하려했지만, 그들 중 누구도 나를 도울 수 없었다.

import easyIO.*; 
class Oblig4{ 
public static void main(String[] args) { 

    int[] antallHybler = new int[18]; 

    for (int i = 0; i < args.length; i++) { 
     antallHybler[i] = Integer.parseInt(args[i]); 
    } 

    Hybelhus hh = new Hybelhus(antallHybler); 
    hh.meny(); 
} 
}class Hybelhus{ 


    Out skjerm = new Out(); 
    In lesFil = new In("Hybeldata.txt"); 
    In tast = new In(); 
    Out skrivTilFil = new Out("Hybeldata.txt", true); 

    Hybel[][] hybler = new Hybel[3][6]; 


    void lesFraFil(){ 

    int maaned = lesFil.inInt(";"); 
    int aar = lesFil.inInt(";"); 
    int totFortjeneste = lesFil.inInt(";"); 
    int totAntallMåneder = lesFil.inInt(";"); 
    int månedsleieVanligHybel = lesFil.inInt(";"); 
    int månedsleieToppEtasjeHybel = lesFil.inInt(";"); 

    skjerm.outln(maaned + ", " + aar + ", " + totFortjeneste + ", " + totAntallMåneder + ", " + månedsleieVanligHybel + ", " + månedsleieToppEtasjeHybel); 

    while(!lesFil.endOfFile()){ 

     for(int i = 0; i < hybler.length; i++){ 
      for(int j = 0; j < hybler[i].length; j++){ 

       String tekst = lesFil.inLine(); 
       if(lesFil == null){ 
        continue; 
       } 
       String[] enArray = tekst.split("; "); 

       hybler[i][j] = new Hybel(); 

       hybler[i][j].etasje = Integer.parseInt(enArray[0])-1; 
       hybler[i][j].rom = enArray[1].charAt(0); 
       hybler[i][j].leietager.saldo = Integer.parseInt(enArray[2]);      
       hybler[i][j].leietager = new Student(enArray[3]); 
      } 
     }  
    } 
} 
    Etasjer[] etasje = new Etasjer[3]; 
    Hybelhus(int[] antallHybler) { 
     for(int i = 0; i < etasje.length; i++){ 
      etasje[i] = new Etasjer(antallHybler[i]); 
     } 
    } 

    void SkrivUt() { 
     for(int i = 0; i < etasje.length; i++){ 
      System.out.println("hei"); 
     } 
    } 

    void meny() { 

     int aksjon = 0; 

     while (aksjon != 8) { 


     skjerm.outln("\nMENY"); 
     skjerm.outln("1. Skriv oversikt"); 
     skjerm.outln("2. Registrer ny leietaker"); 
     skjerm.outln("3. Registrer betaling fra leietaker"); 
     skjerm.outln("4. Registrer frivillig utflytting"); 
     skjerm.outln("5. Månedskjøring av husleie"); 
     skjerm.outln("6. Kast ut leietakere"); 
     skjerm.outln("7. Øk husleien"); 
     skjerm.outln("8. Avslutt");  

     aksjon = tast.inInt(); 

     switch (aksjon) { 
     case 1: oversikt(); break; 
     case 2: regLeietaker(); break; 
     case 3: regBetaling(); break; 
     case 4: regUtflytting(); break; 
     case 5: kjorHusleie(); break; 
     case 6: kastUt(); break; 
     case 7: okHusleie(); break; 
     case 8:; avslutt(); break; 
     default: System.out.println ("\nDu må taste inn et av de åtte valgene over"); 
     break; 
      } 
     } 
    } 
     void oversikt() { 

      final int BREDDE1 = 10; 
      final int BREDDE2 = 35; 
      final int BREDDE3 = 25; 

      skjerm.out("Hybel", BREDDE1); 
      skjerm.out("Leietager", BREDDE2); 
      skjerm.out("Saldo", BREDDE3); 

      skjerm.outln("\n----------------------------------------------------\n"); 

      lesFraFil(); 

     } 

     void regLeietaker(){ 
     } 
     void regBetaling() { 
     } 

     void regUtflytting(){ 
     } 

     void kjorHusleie() { 
     } 

     void kastUt(){ 
     } 

     void okHusleie() { 
     } 

     void avslutt() { 
     } 

} 

class Etasjer{ 
    Hybel[] hybelNavn; 

    Etasjer(int antallHybler){ 
     hybelNavn = new Hybel[antallHybler]; 

     for(int i = 0; i < hybelNavn.length; i++){ 
      char c = (char) i; 
      c += 'A'; 
      hybelNavn[i] = new Hybel(); 
     } 

    } 

} 

class Hybel{ 
    int etasje; 
    char rom; 
    Student leietager; 

    Hybel() { 
    } 
} 

class Student{ 
    int saldo; 
    String studentNavn; 
    Student(String studentNavn){ 
     this.studentNavn = studentNavn; 
    } 

} 
+1

어떤 행이'Hybelhus.lesFraFil (Oblig4.java:63)'입니까? (Oblig4.java, line 63) –

+1

입력 데이터는 어떻게 생겼는가? ";"로 나누는 것이 더 나을 수도 있습니다. (공백 없음) Integer.parseInt를 호출하기 전에 문자열을 자릅니다. –

+0

예외가 발생한 행을 주석으로 표시해 주시겠습니까? –

답변

0

디버거를 사용해야합니다.이 예외를 throw하는 코드 행은 Oblig4.java의 63 행입니다. 서식 때문에이 줄이 어느 줄인지 알 수 없습니다. 그래서 소스 코드와 고토 라인 (63)을보고 내가

hybler[i][j].etasje = Integer.parseInt(enArray[0])-1; 

당신이 할 수있는 것은 같은데요 .. 당신이 무엇을하고 있는지

를 참조하십시오

String temp = enArray[0]; 
System.out.println(temp); 
int tempInt = Integer.parseInt(temp)-1; 
System.out.println(tempInt); 
hybler[i][j].etasje = tempInt; 

그리고 당신을 무슨 일이 벌어 지는지 보지 ... (디버거 사용 방법을 모른다면!)

행운을 빈다!

문제를 해결 하시겠습니까 ???

1

나는이 lesFil.inInt(";");을 무엇을 의미하는지 이해하지 않지만, 나에게이 방법은 분명히 문자열을 구문 분석 int로 반환하고 int (메서드의 이름으로 내 최고의 추측에서 이후로 당신이 말을 요 ur 프로그램에 컴파일 오류가 표시되지 않음).

그리고 ";" 숫자가 아님, NumberFormatException

+0

inInt()는 그의 클래스에있는 메소드입니다. 생성자가 텍스트 파일을 사용하기 때문에 ";" 전달 된 문자열은 분리 문자입니다. 여기에 오류가 발생했을 수 있습니다 ... 63 행에 아무 것도 없기 때문에 ;-) – pengibot