이 코드가 "잘못된 표현식 시작" 예외를 발생시키는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/587280

문제

내 질문은 다음과 같습니다.

  1. "Public Static Boolean validNumcheck (String Num) {" - "불법적 인 표현 시작", " ';'라인에서 몇 가지 오류가 발생합니다. 예상 "및" ')'예상 ".

  2. 사용자에게 각 번호에 대해 총 3번의 시도를 제공하려면 어떻게 해야 합니까?나는 지금 프로그램이 사용자에게 3개의 숫자를 요청하고 올바른 숫자를 얻기 위해 총 3번의 시도를 제공한다고 믿습니다. (제 설명은 형편없습니다...내가 의미하는 바를 더 잘 이해하려면 코드를 읽으십시오.)

이것은 내 코드입니다.

import javax.swing.JOptionPane;

public class Assignment3 {
    public static void main (String[] args){
        final int MAX_TRIES = 3;
        int[] attempts= new int[2];
        String[] getNumber= new String [2];

        //Ask the user for 3 integers.
        while(attempts[0]<MAX_TRIES){
            getNumber[0]= JOptionPane.showInputDialog(null,"Please enter an integer between 0-200.");

            //Pass the value to validNumChek
            validNumCheck (getNumber);

            //If it is not a valid number give the user 3 more tries.
            if (getNumber== false){
                while(attempts[1]<MAX_TRIES){
                    getNumber[1]= JOptionPane.showInputDialog(null,"Please enter an integer between 0-200.");
                    attempts[1]++;}
                }
            attempts[0]++;
        }

    //Parse the string to an integer and check if it is a valid number.
    public static boolean validNumCheck(String num){
        int number;

        try {
            number = Integer.parseInt(num);
            return number >= 0 && number <= 200;                
        }catch(NumberFormatException e){
            //If it is not a valid number return false.
            return false;
        }
    }
}
도움이 되었습니까?

해결책

문제의 의사 코드 또는 알고리즘을 만드는 것이 중요하다고 생각합니다. 첫 번째 그런 다음 작동하면 프로그래밍을 처리합니다 나중에. 그렇지 않으면 동시에 두 가지를 해결할 것입니다. 1. 문제 논리 및 2. 구현 세부 사항.

이것이 내가하는 방법입니다.

//The three numbers should be entered by a user in the main method. 

MAIN PROGRAM starts 
declare a , b , c as numbers

//The numbers should be positive and less than 200. 
// see validNumCheck below.

//part 1.If not, the program asks the user to renter the number.
//part 2.The user will have three chances to enter a valid number for each number. 
//part 3. If the number is still invalid after the three trials, the program displays an error message to the user and ends.

 // ok then read a number and validate it. 
 attempts = 0;
 maxAttempts = 3;

 //part 2. three chances... .           
 loop_while (  attemtps < maxAttempts ) do  // or 3 directly.

      number = readUserInput();  // part 1. reenter the number...
      if( numcheck( number ) == false ) then 
           attempts = attempts + 1;
           // one failure.. try again. 
      else 
           break the loop.
      end 

 end 

 // part 3:. out of the loop. 
 // either because the attempts where exhausted 
 // or because the user input was correct.  
 if( attempts == maxAttemtps ) then 
     displayError("The input is invalid due to ... ")
     die();
 else  
     a = number 
 end 

// Now I have to repeat this for the other two numbers, b and c.
// see the notes below... 
MAIN PROGRAM ENDS

그리고 이것은 "validnumcheck"의 기능 일 것입니다.

  // You are encouraged to write a separate method for this part of program – for example: validNumCheck

bool validNumCheck( num )  begin
     if( num < 0 and num > 200 ) then 
         // invalid number 
         return false;
     else 
         return true;
     end
end 

따라서 숫자 "A"가 검증 될 수있는 지점에 도달했지만 "B"및 "C"에 대해서도 동일한 작업을 수행해야합니다.

코드를 "복사/붙여 넣기"하는 대신, 요구에 맞게 코드를 조정하려고 노력하고 새로운 기능에 작동하는 기능을 만들 수 있습니다.

따라서 새로운 의사 코드는 다음과 같습니다.

MAIN PROGRAM STARTS 
declare a , b , c as numbers
     a = giveMeValidUserInput();
     b = giveMeValidUserInput();
     c = giveMeValidUserInput();

     print( a, b , c ) 

MAIN PROGRAM ENDS

그리고 논리를 새로운 함수 (또는 메소드)로 이동

기능 givemevaliduserinput 함수는 다음과 같습니다 (첫 번째 의사 코드와 거의 동일합니다).

function giveMeValidUserInput() starts 
    maxAttempts = 3;
    attempts = 0;


     loop_while (  attemtps < maxAttempts ) do  // or 3 directly.

          number = readUserInput();
          if( numcheck( number ) == false ) then 
               attempts = attempts + 1;
               // one failure.. try again. 
          else 
               return number 
          end 

     end 

     // out of the loop. 
    // if we reach this line is because the attempts were exhausted.
     displayError("The input is invalid due to ... ")
   function ends 

ValidNumCheck은 변경되지 않습니다.

그로부터 코드를 통과하는 것은 어떻게 든 간단합니다. 당신은 당신이하고 싶은 일 (분석)과 그것을 원하는 방법 (디자인)을 이미 이해했기 때문입니다.

물론 이것은 경험이 더 쉬울 것입니다.

요약

그만큼 문제에서 코드로 전달하는 단계는 다음과 같습니다:

  1. 문제를 읽고 이해하십시오 (물론).

  2. 가능한 "기능"및 변수를 식별하십시오.

  3. 단계별로 어떻게 할 것인가 (알고리즘)

  4. 할 수없는 일이 있으면 코드로 번역하고, 당신을 위해 그것을하는 함수를 만들고 계속 움직입니다.

다른 팁

이 스레드 도움이 될 수 있습니다. "문제 설명"에서 "실제 코딩"으로 전달되는 힌트입니다.

특정 질문에 따라 :

사용자에게 각 숫자에 대해 유효한 번호를 입력 할 수있는 세 가지 기회를 어떻게 줄 수 있습니까? (나는 '대답'만 원하지 않습니다.

실생활에서 계산원 (나쁜 기억이있는)이라면 어떻게 하시겠습니까? 그리고 나는 매우 나쁜 기억을 의미합니다. 고객을 처음 또는 두 번째로 거부한다면 기억할 수 없습니까?

나는 그것을 종이에 적어 놓을 것이고, 고객을 거부 할 때마다 "|"를 추가합니다.

"| | |"

종이에 세 줄이 있으면 경찰을 부를 것입니다. .. :)

그것은 여기서 비슷합니다. 당신이 약간 없다면 물건 그건 아마도 달라지다 당신은 무한하게 들어갈 것입니다 고리 ;)

validnumcheck is value를 반환 한 다음 무효 기본 방법에서 종료한다고 가정합니다.

아니

... 아니면 그 주요 방법으로 프로그램을 종료 할 수 있습니까?

예.

(실생활에서) 계산할 때 숫자를 상자에 저장할 필요가 없으므로 카운트의 값을 변경하고 제한이 있어야합니다.

예를 들어 이것을 교체 할 수 있습니다.

        int[] count= new int[2];

이것으로 :

        int attemtps = 0 ; // or count 
        int maxTries = 3;

정수 배열을 문자열 배열에 할당 할 수 없습니다.

       String[] getNumber= new int [2];

문자열 배열을 사용하면 작동 할 수 있지만 문자열 배열을 할당해야합니다.

       String[] numbers = new String[2];

또는 int를 사용할 수 있습니다.

       int [] numbers = new int [2]; 

하나를 선택.

배열은 값을 저장할 수있는 상자와 같습니다.

에서 메소드 서명 (그건 "public static int validNumCheck(num1,num2,num3)"), 유형을 선언해야 합니다. 형식적 매개변수. "public static int validNumCheck(int num1, int num2, int num3)" 트릭을 수행해야합니다.

하지만 더 나은 디자인을 만드는 것이 validNumCheck 하나의 매개변수만 취하고 세 숫자 각각을 사용하여 이를 호출합니다.


업데이트된 코드를 본 후 제가 제안하는 다음 제안은 괜찮은 IDE를 얻는 것입니다.방금 NetBeans에 로드했는데 많은 오류가 발견되었습니다.특히 "불법적인 표현 시작"은 } IDE가 즉시 플래그를 지정한 while 루프에서."Hello world"를 지나면 메모장은 더 이상 자르지 않습니다.

모든 오류에 대한 수정 사항을 나열하지는 않지만 명심하세요. int[], int, String[], 그리고 String 모두 다릅니다.당신은 그것들을 서로 바꿔서 사용하고 있는 것 같습니다(아마도 코드에 대한 변경 사항으로 인해).다시 말하지만 IDE는 이러한 모든 문제를 표시합니다.


최신 코드(개정 12)에 응답:점점 가까워지고 있습니다.사용하신 것 같습니다 MAX_TRIES 두 가지 목적으로:입력할 세 개의 숫자와 각 숫자에 대한 세 가지 기회가 있습니다.이 두 숫자는 동일하지만 둘 다에 동일한 상수를 사용하지 않는 것이 좋습니다. NUM_INPUTS 그리고 MAX_TRIES 나는 그들을 부를 것입니다.

그리고 아직 누락된 항목을 추가하지 않았습니다. } while 루프의 경우.

이를 수정한 후 다음으로 해야 할 일은 다음을 살펴보는 것입니다. if (getNumber == false). getNumberString[], 이므로 이 비교는 불법입니다.당신은 반환 값을 얻어야합니다 validNumCheck 다음과 같은 변수로

boolean isValidNum = validNumCheck(getNumber[0]);

게다가 그럴 이유도 없고 getNumber 배열이 되어야 합니다.하나만 있으면 돼 String 한 번에, 그렇지?

메소드 정의의 모든 매개 변수에는 다음 유형이 필요합니다.

public static int validNumCheck(int num1, int num2, int num3){

그러나 나는 당신이 한 번만 확인할 때 왜 세 숫자를 모두 전달하는지 궁금합니다. 그리고 숫자가 참이든 아니든 반환을 원하므로 반환 값은 부울이어야합니다.

public static boolean validNumCheck(int num){
    // test and return true or false

또한 사용자가 "ABC"를 입력하면 "intger.pareint (String)"메소드에서 예외가 나타납니다. 입력 된 텍스트를 문자열로 저장하고 싶을 수도 있습니다.

public static boolean isValidNumber(String num){
try {
    int number = Integer.parseInt(num);
    return number >= 0 && number <= 200;        
}catch(NumberFormatException e){
    return false;
}
} 

편집 1 :세 번의 시도의 경우, 당신은 루프가 필요합니다. int.

그건 그렇고, Joptionpane과 Jmessagedialog를 사용해야합니까? 이것은 GUI 물건이며 그 구멍을 복잡하게 만듭니다. System.out 및 System.in을 사용하여 콘솔에 텍스트를 읽고 쓸 수도 있습니다.

편집 2 :하나의 팁, 주어진 길이의 int 배열을 만들 때 배열의 모든 장소는 0으로 채워져 있으므로 다음을 쓸 수 있습니다.

int[] count= new int [3];

그리고 필요하지 않습니다 :

count[0]=0;
count[1]=0;
count[2]=0;

0이 아닌 다른 값을 사용하려면 다음과 같은 짧은 형태를 사용할 수 있습니다.

int[] count = {1, 5, 2}

편집 3 :당신이해야 할 일/배워야하는 한 가지는 이것입니다. 모든 것을 쓰지 말고 많은 오류와 실행되지 않은 프로그램으로 끝납니다. 조금 코딩하고 조금 테스트하십시오. 그것의 한 부분을하고, 그것이 실행되고 당신은 행복합니다.

이 일이 끝난 적이 있습니까? 내 말은, 당신은 이미 당신이 사용하려는 Joptionpane-inputDialog를 보았습니까? 그렇지 않다면 먼저 다음을 수행하십시오. (그리고 실행하십시오!)

public class Assignment3 {

    public static void main (String[] args){

        int[] numbers = new int[3];

        for (int i = 0; i < numbers.length; i++) {
            JOptionPane.showInputDialog("enter something");
        }
    }
}

실행할거야? 엄청난! 이제, joptionpane과 함께 해당 라인을 루프로 감싸십시오. 사용자가 유효한 번호 (이미 가지고있는 CheckValidnum 메소드를 사용하여)를 입력 할 때까지 실행되거나 그의 세 가지 시도를 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top