2014-03-06 4 views
0

5 개의 숫자로 된 사용자 입력을 가져온 다음 해당 문자열을 분할하여 해당 입력을 정수로 변경하려고합니다. 하지만 말하고있는 오류를 계속 : "main"스레드에서 예외 java.lang.NumberFormatException : 입력 문자열 : "". 그것을 고치는 방법에 대한 단서?입출력 스캐너 Java

public class Exercise{ 
public static void main(String [] args){ 

    Scanner scan = new Scanner(System.in); 
    System.out.println("Input Quizzes: "); 
    Scanner scan = new Scanner(System.in); 
    String quiz = scan.nextLine(); 
    String [] part = quiz.split(" "); 
     int pq1 = Integer.parseInt(part[0]); 
     int pq2 = Integer.parseInt(part[1]); 
    System.out.println("Input Additionals: "); 
    String quiz1 = scan.nextLine(); 
    String [] part1 = quiz1.split(" "); 
     int pqa1 = Integer.parseInt(part1[0]); 
     int pqa2 = Integer.parseInt(part1[1]); 
    System.out.println("Input Recitation: "); 
     int recitation = scan.nextInt(); 
    System.out.println("Input Seatworks: "); 
     int swhw1 = scan.nextInt(); 
    System.out.println("Input Exercises "); 
    String exp = scan.nextLine(); 
    String [] part2 = exp.split(" "); 
      int ex1 = Integer.parseInt(part2[0]), 
       ex2 = Integer.parseInt(part2[1]), 
       ex3 = Integer.parseInt(part2[2]), 
       ex4 = Integer.parseInt(part2[3]), 
       ex5 = Integer.parseInt(part2[4]); 
    } 
} 
+0

를 넣을 수 있습니다? '1 2 3 4 5' 그럼 Enter를 누르십니까? 귀하의 코드는 나를 위해 잘 작동합니다. – nikis

+0

입력 내용이 확실하지 않지만 문자열을 다듬 었습니까? trim() 메서드를 사용하십시오. –

답변

0

문제는이 상황에서 발생할 수

  1. 문자열이 그들이 당신이 숫자 사이에 하나 개 이상의 공간을 가지고

  2. 그러므로이 자리 얻을 되지 않은 다른 문자가 포함되어 분할 배열에서 5 개 이상의 셀 (해당 셀에 빈 문자열 ""이 포함됨)

그래서 당신은 명령을 분할하기 전에 ..이 줄을 추가 :

exp = exp.trim().replaceAll(" +", " ");

이 문제를 해결됩니다!

public static void main(String [] args){ 
Scanner scan = new Scanner(System.in); 
System.out.println("Input Exercises "); 
String exp = scan.nextLine(); 
exp = exp.trim().replaceAll(" +", " "); 
String [] part2 = exp.split(" "); 
     int ex1 = Integer.parseInt(part2[0]), 
      ex2 = Integer.parseInt(part2[1]), 
      ex3 = Integer.parseInt(part2[2]), 
      ex4 = Integer.parseInt(part2[3]), 
      ex5 = Integer.parseInt(part2[4]); 
} 
0

그것은 그것을 사용하는 nextInt 때문에 발생합니다 및 try&catch 또한이 전체 코드입니다

을 권장합니다.

전체 행을 읽은 다음 Integer.parseInt() 메서드를 사용하여 정수 입력의 유효성을 검사하려면 먼저 nextLine()을 사용하는 것이 좋습니다. 이처럼

:

Scanner scan = new Scanner(System.in); String s = scan.nextLine(); 

try{ 
    Integer.parseInt(s); } catch(NumberFormatException ex){ 
    System.out.println("Its not a valid Integer"); } 

또는 그냥 (이 권장되지 않음) 스캐너 전에 다음 줄이 번호를 입력 어떻게

public static void main(String [] args){ 

    Scanner scan = new Scanner(System.in); 
    System.out.println("Input Quizzes: "); 
    scan = new Scanner(System.in); 
    String quiz = scan.nextLine(); 
    String [] part = quiz.split(" "); 
     int pq1 = Integer.parseInt(part[0]); 
     int pq2 = Integer.parseInt(part[1]); 
    System.out.println("Input Additionals: "); 
    String quiz1 = scan.nextLine(); 
    String [] part1 = quiz1.split(" "); 
     int pqa1 = Integer.parseInt(part1[0]); 
     int pqa2 = Integer.parseInt(part1[1]); 
    System.out.println("Input Recitation: "); 
     int recitation = scan.nextInt(); 
    System.out.println("Input Seatworks: "); 
     int swhw1 = scan.nextInt(); 
     scan.nextLine(); 
    System.out.println("Input Exercises "); 
    String exp = scan.nextLine(); 
    String [] part2 = exp.split(" "); 
      int ex1 = Integer.parseInt(part2[0]), 
       ex2 = Integer.parseInt(part2[1]), 
       ex3 = Integer.parseInt(part2[2]), 
       ex4 = Integer.parseInt(part2[3]), 
       ex5 = Integer.parseInt(part2[4]); 
    }