2012-08-02 1 views
0

내 애플릿에 이상하거나 신비한 일이 일어나고 있습니다! 그것은 숫자를 추측하는 사람을 포함하며, 난수와 비교됩니다. 네가 맞을 때까지 너는 추측을 계속한다. 당신이Java 애플릿 try/catch 문과 함께 이상한 일이 발생했습니다

ewjkgmvf 

같은 것을 입력 한 경우에는 입력 필드에 NumberFormatException을 얻을 것입니다. 이 문제를 해결하기 위해 나는 try ... catch를 사용하여 String으로 돌리는 것을 int에 포위했다. 예외가 잡히면 레이블에 "그 번호가 아닙니다!"라는 메시지가 표시됩니다. 대신, "너무 낮습니다. 다시 시도하십시오"는 추측 된 숫자가 너무 낮을 경우에만 발생하기로되어있었습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

짧은 프로그램 일뿐이므로 전체 프로그램을 게시합니다. 효과적으로 이전을 사용하여, number에 어떤 값을 설정하지 발생합니다

try 
{ 
    number = Integer.parseInt(temp); 
} 
catch(java.lang.NumberFormatException e) 
{ 
    prompt.setText("That is not a number!"); 
} 
if (x < number) { 
    //... 

NumberFormatException 경우

import java.awt.*; 
import java.applet.*; 
import java.util.Random; 
public class Number_guess_applet extends Applet{ 
    private static final long serialVersionUID = 1L; 
    Button btnClick; 
    TextField entry; 
    Label prompt; 
    String temp; 
    Random r = new Random(); 
    int x = r.nextInt(100); 
    int number; 
    int keepGoing = 1; 

     public void init(){ 
     prompt = new Label("Guess the number"); 
     add(prompt); 
     entry = new TextField(10); 
     add(entry); 
     btnClick = new Button("Check your guess"); 
     add(btnClick); 
    } 
    public boolean action(Event evt, Object arg){ 


     temp = entry.getText(); 
     try 
     { 
     number = Integer.parseInt(temp); 
     } 
     catch(java.lang.NumberFormatException e) 
     { 
     prompt.setText("That is not a number!"); 
     } 
     if (x < number) 
      prompt.setText("Too high. Try again."); 
     else if (x > number) 
      prompt.setText("Too low. Try again."); 
     else if (x == number) 
      prompt.setText("Found it!"); 
     else 
      prompt.setText("Invalid or not a number. Choose a number between 1 and 100"); 
     return(true); 


    } 
} 

답변

2

이동합니다 시도/캐치에 논리를 그렇게는 프롬프트 텍스트를 덮어 쓰는 것 이후를 실행하고 여전히 숫자를 x와 비교하기 때문에 그 메시지를 얻고 있습니다. 하나의 옵션은 return 문을 catch 블록 안에 넣는 것입니다.

1

봐 밀접 :

여기 내 코드입니다. 어떤 값을 number으로 설정하거나 number의 로직을 건너 뜁니다. 그렇지 않은 경우 if (x < number) 조건은 이전 값 number에서 실행됩니다.

+0

애플릿을 다시 시작하려면 어떻게해야합니까? 내장 된 방법이 있습니까? – imulsion

1

catch 블록이 실행을 마친 후 나머지 메서드는 실행됩니다 (number은 변경되지 않음).

catch 블록에서 돌아 가야합니다.

+0

유효하지 않은 숫자가 입력 된 첫 번째 숫자 인 경우 숫자가 0 일 것입니다.이 숫자는 테스트에 사용 된 것으로 보입니다. 그래서 너무 작지 만 너무 크지 않습니다. – 0xFE

1

프롬프트에서 "그 번호가 아닙니다!"라는 메시지가 나타납니다. 텍스트가 "너무 높습니다. 다시 시도하십시오." 또는 "너무 낮습니다. 다시 시도하십시오." 또는 "찾았습니다!" number의 이전 값에 따라 number가 다시 할당되지 않습니다. 당신은 당신의 액션 메소드에서 다음을 시도 할 수 있습니다 : - :

try { 
     number = Integer.parseInt(temp); 
     if (x < number) 
      prompt.setText("Too high. Try again."); 
     else if (x > number) 
      prompt.setText("Too low. Try again."); 
     else if (x == number) 
      prompt.setText("Found it!"); 
     else 
      prompt.setText("Invalid or not a number. Choose a number between 1 and 100"); 
} catch(java.lang.NumberFormatException e) { 
     prompt.setText("That is not a number!"); 
} 
return(true); 
0

번호의 기본값은 0에

 temp = entry.getText(); 
     try 
     { 
      number = Integer.parseInt(temp); 
      if (x < number) 
       prompt.setText("Too high. Try again."); 
      else if (x > number) 
       prompt.setText("Too low. Try again."); 
      else if (x == number) 
       prompt.setText("Found it!"); 
      else 
       prompt.setText("Invalid or not a number. Choose a number between 1 and 100"); 
     } 
     catch(java.lang.NumberFormatException e) 
     { 
     prompt.setText("That is not a number!"); 
     } 

     return(true); 
+0

모두 감사합니다! 잘 작동합니다 :) – imulsion

+0

문제 없음;) 해피 코딩. – JustinKSU

관련 문제