2016-08-22 2 views
-11

이것은 사용자가 지식을 테스트하기 위해 임의의 방정식을 제공하고 오류가 나타나지 않는 코드입니다. 코드를 실행하면 Eclipse에서 컴파일되지 않습니다. IntelliJ Idea에서 실행하면 실행되지만 코드가 나타나지 않으며 아무 것도 할 수 없습니다.내 자바 코드를 컴파일하는 방법은 무엇입니까?

package logical; 
import java.util.Random; 
import java.util.Scanner; 

public class logical { 
@SuppressWarnings("resource") 
public static void main (String args[]){ 

    int qn1, qn2; //Numbers for the question 
    int ua; //The users answer 
    int answer; //The actual answer 
    int counter = 0; //Controls the number of questions that can be answered 
    int tally = 0; //Number of correct responses 
    String again = "y"; 
    Scanner in = new Scanner(System.in); 
    Random dice = new Random(); 
    while(again == ("y") || again == ("Y")){ 
    for(counter=1;counter>=5;counter++){ 
    qn1 = 1+dice.nextInt(40); 
    qn2 = 1+dice.nextInt(40); 
    answer = qn1 + qn2; 
     System.out.printf("What is %d + %d",qn1,qn2); 
     ua = in.nextInt(); 
     if(ua == answer){ 
      System.out.println("That is correct!"); 
      counter++; 
      tally++; 
     } 
     else{ 
      System.out.println("Sorry, that is wrong! The correct answer is " + answer); 
     } 
     System.out.println("Would you like to try again?(Y/N)"); 
     again = in.next(); 
     if(again=="y" || again=="Y"){ 
      counter=0; 
     }else { 
      System.out.println("Thanks for playing your results were " + tally + " out of 5"); 
     } 
     } 

    } 
    System.out.println("Thanks for taking the math challenge!"); 
} 
} 
+8

이며 컴파일 오류 메시지는 .....입니까? –

+0

여기에 논리 오류가 있습니다'again == ("y")'=='사용하지 않고 equals() 메소드를 사용하여 문자열을 비교해야합니다 –

+3

중괄호에있는 그 추한 주석을 제거하십시오. 나는 대학에서 무엇을 가르쳤는지 상관하지 않습니다. 그렇게하면 읽기가 더 어려워집니다. – byxor

답변

0

코드는 무한 루프입니다. 때문에 counter 시작 1에서,

for(counter=1;counter>=5;counter++){ 

즉시 완료, 당신은 그것을 기대하고있다 : while 루프 내부의 유일한되는, 그런 다음이

while(again == ("y") || again == ("Y")){ 

:
이 참으로 밖으로 시작

그래서 이것을 실행하면 while 루프는 아무 것도하지 않고 영원히 반복됩니다.

  1. .equals 또는 .equalsIgnoreCase하지 ==와 문자열 비교.

  2. for 루프를 수정하십시오.

  3. 코드를 올바르게 들여 씁니다.

0

문제 루프

for(counter=1;counter>=5;counter++){...} 

counter=0 값은 초기화에 대한 것이다. 그러나 루프는 카운터 값이 5 이상이거나 5를 초과 한 후에 만 ​​실행되므로 루프에 들어 가지 않습니다. 그러나 루프 내부에서 "카운터"값을 증가시키고있었습니다. 따라서 출력이 인쇄되지 않습니다.

0

코드의 진짜 원인은 다음과 같은있다 : - 내가 좋아하는 것

String again = "y"; 
     ////////DECLARATION/////////////// 
     Scanner in = new Scanner(System.in); 
     Random dice = new Random(); 
     ////////NOW THE MAGIC HAPPENS///// 
     while(again == ("y") || again == ("Y")){ 
      for(counter=1;counter>=5;counter++){ 

몇 가지 포인트가 언급 :

  1. 부울 조건 루프가 변경할 수있는 기회를 얻을 결코 동안 아래.
  2. for 루프의 카운터 변수는 항상 실패합니다.
  3. 그래서 while과 for 루프 사이에서 실행이 계속 유지되고 끝나지 않은 프로세스에 갇혀 있습니다.

나는 희망한다.

관련 문제