2014-10-12 2 views
-1
public static int guess (int numberOfGuesses, int secretNumber) { 
    Scanner sc = new Scanner(System.in); 

    for(int n = 1; n <= numberOfGuesses; n++){ 
     System.out.println("Guess "+n+" of "+numberOfGuesses+":"); 
     int userNumber = sc.nextInt(); 
     if(userNumber == secretNumber){ 
     return n;  
     } 
     while(userNumber > secretNumber){ 
     System.out.println("The guess is too big"); 
     } 
     while(userNumber < secretNumber){ 
     System.out.println("The guess is too small"); 
     } 
     while(userNumber > 100){ 
     System.out.println("The number "+userNumber+" is not valid. "); 
     } 
    } 
    return -1; 
    } 
} 
+2

Этот синтаксис не является действительным. Посмотрите на свой 'if {} return n; else {} ' –

+0

Редакция 3 изменила код, поэтому откат назад к обороту 2 .... – hyde

+0

« Как исправить этот код? »... ну, я думаю, что переписывание его синтаксически и логически звуковым образом звучит как план , Это не компилируется, и на самом деле это не похоже на что-либо императивное. Вы, наверное, должны сначала прочитать некоторые уроки. – EpicPandaForce

ответ

1

Это довольно просто. Вам не нужно выходить из цикла, когда совпадают числа. Вы просто возвращаете n, как вам нужно. Если петля выходит без найденного secretNumber, вы возвращаете -1.

public static int guess (int numberOfGuesses, int secretNumber) { 

    Scanner sc = new Scanner(System.in); 

    for(int n = 1; n <= numberOfGuesses; n++){ 
     System.out.println("Guess "+n+" of "+numberOfGuesses+":"); 
     int userNumber = sc.nextInt(); 

     if(userNumber == secretNumber){ 
      return n;  
     } 
    } 
    return -1; 
} 

BTW, код имеет смысл, если вы дадите пользователю некоторые подсказки, которые помогут им угадать секретный номер.

+0

ничего себе я не могу в это поверить. Не могли бы вы объяснить мне, почему это? Я пытаюсь выучить язык. Спасибо. – Rawrqqplz

+0

@Rawrqqplz Что вы не понимаете? Вы можете выйти из цикла for одним из нескольких способов: 1. когда условие становится ложным 2. вызывая 'break' 3., возвращаясь из метода, который содержит цикл (вызывая' return something; '). Поскольку вы хотите выходить из цикла и возвращать n в одно и то же время, самое простое дело - 'return n;'. – Eran

+0

Как я могу включить подсказки, например, если userNumber выше, чем экран secretNumber, «ваш номер слишком высок» и тому подобное? Потому что мне нечего было бы возвращать для метода? и мне нужно что-то вернуть? – Rawrqqplz

0

Это чище, чтобы закрыть Scanner после ее использования, поэтому я хотел бы сделать что-то вроде этого:

public static int guess(int numberOfGuesses, int secretNumber) { 
     Scanner sc  = new Scanner(System.in); 
     int userNumber = secretNumber/2; 
     boolean found = false; 
     int tries; 
     for (tries = 0 ; tries <= numberOfGuesses && !found ; tries++) { 
      userNumber = sc.nextInt(); 
      found  = secretNumber == userNumber; 
     } 
     sc.close(); 
     return found ? tries : -1; 
    } 
Смежные вопросы