2016-10-22 2 views
-1

내 코드에 어떤 문제가 있습니까? 나는 그것이 1과 6 사이에 없으면 번호를 입력하라는 요청을 시도하거나 유효하지 않다고 말한 번호를 시도하고 또 다른 시도를 시도한다. 사용자는 3 번만 시도 할 수 있습니다.try while catch try while catch

import java.util.Scanner; 

public class Game { 

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    int[] numbers = new int[6]; 

    System.out.println("Enter a number on a die from 1-6:"); 
    String dieinput = input.next(); 
    int invalidcount = 0; 
    System.out.println("Your number is: " + dieinput); 



    do{ 
    try 
    { 
     // the String to int conversion 
     int dienum = Integer.parseInt(dieinput.trim()); 
     int dienumOE = 0; 
     int count=0; 

     //test number input 
     if ((dienum >= 1) && (dienum<= 6)) 
      System.out.println("number is " + dienum + oddoreven(dienum)); 
     else 
      System.out.println("Invalid number, please enter a number 1-6"); 
      count++; 
      System.out.println("Count" + count); 
     } 
    catch (NumberFormatException nfe){ 
     System.out.println("Invalid number, please enter a number 1-6"); 
     System.out.println("Count" + count); 
     } 
    while (count <= 3 && count >=0); 
    } 
    } 





// Check if odd or even 
public static String oddoreven(int num) { 
    String result; 

    if (num % 2 == 0) 
     result = "even"; 
    else 
     result = "odd"; 
    return result; 
} 
} 
+1

무한 루프. 각 루프가 시작될 때마다 카운트를 0으로 설정합니다. 아래 답변을 참조하십시오. 그러나이 변수를 루프 내에서 0으로 설정하지 마십시오. –

+0

전체 예제를 게시하십시오 - 소스 코드가 컴파일되지 않습니다. – GhostCat

+0

int 카운터를 변경했지만 do-while이 올바로 작동하고 있습니다. 제안? –

답변

2

귀하의 문제는 "잘못"범위 지정이다 : 당신은 블록을 시도 의 범위 내에서 선언 된 캐치 블록 내에서 변수를 사용할 수 없습니다!

즉, 당신이 필요합니다

int counter = 0; 
try { ... 
} catch (... 

당신이 내에서 카운터 사용하려는 경우 모두 시도하고 캐치!

은 "규칙은"매우 간단하다. 변수는 "블록"은에 실제로 코드를 컴파일하지 못하도록

을 닫고 그} 그까지 만 볼 수 있습니다! 에 코드의 100 줄을 쓰기 다음 컴파일러를 실행하지 않는 :

그래서, 실제 교훈은 여기에 더 같다. 가능한 한 적은 수의 줄만 작성하십시오. 생각할 때마다 :이 내용은 "충분합니다."다음에 을 컴파일하십시오. 그런 다음보고 된 오류를 해결하십시오. Java 컴파일러는 잘못 처리 한 내용을 알려주는 특정 메시지를 제공함에 정말 좋습니다. 하지만 지저분한 코드를 올려 놓으면 더 힘들어집니다!

기록을 위해 : SO는 "지저분한 코드를 컴파일하는 데 사용해야하는"원격 컴파일러 서비스가 아닙니다!

+0

* 그리고 기록을 위해 : SO는 "지저분한 코드를 컴파일하는 데 사용해야하는"원격 컴파일러 서비스가 아닙니다! * 당신이 그랬기 때문에 재미 있습니다. 이 질문들 중 중복 된 것이 있으므로 다시 대답 할 필요가 없습니다. – Tunaki