2013-07-31 2 views
-6

다음 프로그램이 작동하지 않는 이유를 알 수 없습니다. 실수 한 부분을 도와주세요. 고맙습니다. 다음의 토큰이 정수 정규 표현식과 일치하지 않는 경우 , 또는왜 다음 프로그램이 작동하지 않습니까?

그래서 나는 것은 당신이 할 수있는 범위를 벗어 - InputMismatchException을 :

가 오류 : 문서에 따르면

import java.util.Scanner; 

public class LargestNumber { 
    public static void main(String[] args) { 
     int[] numbers = new int[100]; 
     int largestNumber = 0; 

     System.out.println("Enter numbers. When you want to finish, type 'finish'."); 
     Scanner sc = new Scanner(System.in); 

     do { 
      if (sc.hasNextInt()) { 
       for (int counter = 0; counter < 10; counter++) 
        numbers[counter] = sc.nextInt(); 
      } 
      if (!sc.hasNextInt() && !sc.hasNext("finish")) { 
       System.out.println("It's neither number nor 'finish'."); 
      } 
     } 

     while (!sc.hasNext("finish")); 

     for (int x : numbers) { 
      if (x > largestNumber) { 
       largestNumber = x; 
      } 
     } 

     System.out.println("The largest number is: " + largestNumber); 
    } 
} 
+0

모자가 문제입니까? – tbodt

+0

어떻게 작동하지 않습니까? 컴파일 오류? 런타임 에러? 예기치 않은 결과가 있습니까? 설명 해주십시오. – jazzbassrob

+0

InputMismatchException이 발생합니다. – user2637870

답변

-1

대신 :

int counter = 0; 
while (counter < numbers.length) { 
    if (sc.hasNextInt()) { 
    numbers[counter++] = sc.nextInt(); 
    } else { 
    if (sc.hasNext("finish")) { 
     sc.close(); 
     break; 
    } else { 
     System.out.println("It's neither number nor 'finish'."); 
     sc.next(); 
    } 
    } 
} 

for (int x : numbers) { 
    if (x > largestNumber) { 
largestNumber = x; 
    } 
} 

System.out.println("The largest number is: " + largestNumber); 

도움이 되길 바랍니다.

+0

왜 downvoting입니까? – fGo

+0

내가 downvoted 누가하지만, 여기에 작동하지 않는 경우 변경되지 않습니다. – user2637870

+0

나는 이것이 정말로 효과가 있다고 생각하지 않았기 때문에 downvoted, 그리고 OP가 검증되었다. – tbodt

0

Scanner은 복잡하고 시간이 많이 걸리지 않는다고 생각합니다. 구식 방식으로 수행하는 방법은 다음과 같습니다.

public class LargestNumber { 
    public static void main(String[] args) { 
     int largestNumber=0; 
     System.out.println("Enter numbers. When you want to finish, type 'finish'."); 
     BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); 
     String line; 
     while (!(line = r.readLine()).equals("finish")) { 
      int val = Integer.parseInt(line); 
      if (val > largestNumber) 
       largestNumber = val; 
     } 
     System.out.println("The largest number is: " + largestNumber); 
    } 
} 

이렇게하려면 새 줄에 각 번호를 입력하십시오. 나는 하나 개의 번호를 읽고 여기에 짧은 알고리즘을 사용하고, 지금까지 최대보다 큰 경우, 새로운 번호가 최대입니다 지금까지이 부분은

+0

OP가 * 사용하는 방식이라고 생각합니다. * 스캐너는 지나치게 복잡합니다. 그는 단순한 요구 사항을 엉망으로 만들었습니다. –

+0

코드가 닫힌 중괄호가 필요하다고 생각합니다. –

+0

@AndreaParodi 당신이 옳습니다. – tbodt

0

:

do { 
     if (sc.hasNextInt()) { 
      for (int counter = 0; counter < 10; counter++) 
       numbers[counter] = sc.nextInt(); 
     } 
     if (!sc.hasNextInt() && !sc.hasNext("finish")) { 
      System.out.println("It's neither number nor 'finish'."); 
     } 
    } 

    while (!sc.hasNext("finish")); 

가 이해되지 않는다 . 당신 :

  1. 입력의 다음 항목이 정수인지 테스트합니다.
  2. 다음 토큰을 모두 구문 분석하려고 시도합니다.
  3. 11 번째 토큰에서 다른 정수인지 "완료"인지 확인합니다.
  4. 그렇지 않은 경우 예외가 발생합니다.
  5. "완료"가 아니라면 모든 것을 반복하십시오.

    1. 체크 다음 토큰 :

    당신이 할 실제로해야 훨씬, 훨씬 더 간단 뭔가가 "끝"이 완료 인 경우에

    • ;
    • 정수 인 경우 구문 분석하십시오.
    • 그렇지 않으면 오류가 발생합니다.
  6. 최대 100 회 반복.

  7. 입력을 수락했습니다. 처리를 계속하십시오.
관련 문제