2010-12-01 11 views
0

프로그래밍에 익숙하지 않으므로 나에게 훌륭한 초보자라고 생각합니다. 딜레마 : 예에 응답 할 때마다 코드를 반복하고 싶습니다. 문이 먼저오고 마침내 부울 조건이 평가되어야하기 때문에 "do while loop"를 사용합니다.JavaSE의 do while 루프 문제

코드는 :

import java.util.Scanner; 

class whysoserious { 

    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 

     do{ 
     String go = YES; 

     int setone = 0; 
     int settwo = 0; 

     System.out.println("Enter two numbers: "); 

     setone = sc.nextInt(); 
     settwo = sc.nextInt(); 
     int set = setone + settwo; 


     System.out.println("What is " +setone+ " + " +settwo+ " ? "); 
     int putone = 0; 
     putone = sc.nextInt(); 

     if (putone == set) 
      System.out.println("Correct!"); 

     else 
      System.out.println("Wrong Answer - The correct answer is: "+set+""); 

     System.out.println("Continue?"); 
     cont = sc.nextLine(); 
     } while (cont == go); 
    } 
} 

나는 CMD 프롬프트 줄을 추가하도록 요청 받았다.

  • C : \ 테스트> javac의 whysoserious.java whysoserious.java:15 : 기호 기호를 찾을 수 없습니다 : 변수 YES 위치 : 클래스 문자열 갈 whysoserious = YES; ^ whysoserious.java:38 : 찾을 수 없습니다. 심볼 기호 : 변수 cont 위치 : 클래스 whysoserious cont = sc.nextLine(); ^ whysoserious.java:39 : 찾을 수 없습니다. 심볼 기호 : 변수 cont 위치 : 클래스 whysoserious } while (cont == go); ^ whysoserious.java:39 : 찾을 수 없습니다 기호 기호 : 변수 이동 위치 : 수업 whysoserious } while (cont == go); ^ 4 오류

컴파일 할 때마다 항상 오류가 발생합니다. 이 배후의 지식은 사용자가 예 또는 아니오를 입력하여 계속 진행할 때마다 코드를 반복하고 싶다는 것입니다. do {없이 코드가 작동하는지 관찰하십시오. 이 시점에서, 나는 할 동안 붙어 있어요.

+0

우리에게 오류를주십시오. 오류는 단순히 화면을 어지럽히는 것이 아니라 문제 해결을위한 것입니다. :) – Teekin

+2

서식을 수정하십시오. –

+1

당신의 코드는 이것 없이는 잘 작동하지만 Java 스타일 가이드 라인은 클래스가 대문자로 시작해야한다고 말하고 클래스, 변수 및 메소드는 모두 낙타를 사용해야합니다. 그래서 당신의 학급은 "WhySoSerious"라는 이름을 지어야합니다. – Jonathan

답변

7

여러 문제 :

  • 당신은, 루프 내에서 go를 선언 cont 또는 YES 그래서 컴파일러들이

  • 무엇인지 모르는 선언 결코 while의 범위는 밖으로 너무 표현

  • 문자열을 ==과 비교하면 여기에 필요한 것이 없습니다. 두 개의 diffe가있을 수 있습니다. 같은 내용의 문자열을 대여하십시오. 대신 equals을 사용하십시오.

컴파일러의 오류 메시지는 처음 두 가지를 알려줍니다. 컴파일러의 말에주의하십시오.

쉬운 수정 : 그러나, do 전에 String cont;를 추가 go 없애 사용자가 "예"또는 "Y"또는 "예"또는 다른 변화를 입력하면이 것입니다 여전히 출구 시험 while ("YES".equals(cont));을합니다.

+0

두 가지가 더 있습니다 : @Racket 3 개의 닫는 대괄호가 2 대신에 있고 다른 하나는 이미 @ Ronnie의 대답에 있습니다. –

3

라인 :

String go = YES; 

읽어야는 :

String go = "YES"; 

그렇지 않으면, 그 YES 생각합니다 컴파일러에 대해 알고 놀라게 진행되지 않는 몇 가지 변수입니다.

1

@Ronnie Howell은 ... equals() 메서드를 String 동등성에 사용했습니다. 당신이 cont을 정의한 경우

while (cont == go); 

읽어야 ...

while (cont.equals(go)); 

PS ... 내가 볼 수 없습니다. do 루프 밖에서 신고하십시오.

0

다음 작품 :

import java.util.Scanner; 

public class WhySoSerious { 

    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     String cont; 
     String go = "YES"; 

     do { 

      System.out.println("Enter two numbers: "); 

      int setone = sc.nextInt(); 
      int settwo = sc.nextInt(); 
      int set = setone + settwo; 


      System.out.println("What is " + setone + " + " + settwo + " ? "); 
      int putone = sc.nextInt(); 

      if (putone == set) 
       System.out.println("Correct!"); 
      else 
       System.out.println("Wrong Answer - The correct answer is: " + set + ""); 
      System.out.println("Continue?"); 
      cont = sc.next(); 
     } while (cont.equalsIgnoreCase(go)); 
    } 
} 
+0

감사합니다. 나는 질문이있다. sc.next() 대신 sc.nextLine()을 넣으면 왜 작동하지 않습니까? 차이점이 뭐야? – Racket

+0

public String next() : 이 스캐너에서 다음으로 완전한 토큰을 찾아 반환합니다. ------------------------------------------------ -------------------- public String nextLine() : 이 스캐너를 현재 줄 앞으로 이동하고 건너 뛴 입력을 반환합니다. 이 메소드는 끝에있는 행 구분자를 제외한 나머지 현재 행을 리턴합니다. 위치는 다음 행의 시작으로 설정됩니다. –