2016-03-22 4 views
1

У меня есть Java-задание и не могу заставить его работать.Guessing Game for Java

Я играю в гадание между 1-100. Когда я запускаю свой код, он продолжает говорить «слишком низко», правильно ли он или слишком высок.

Вот мой код:

public static void main(String[] args) throws java.io.IOException { 

    int i, ignore, answer = 64; 

    do { 
     System.out.println("I'm thinking of a number between 1 and 100."); 
     System.out.println("Can you guess it?"); 

     i = (int) System.in.read(); 

     do { 
      ignore = (int) System.in.read(); 
     } while (ignore != '\n'); 

     if (i == answer) System.out.println("**RIGHT**"); 
     else { 
      System.out.print("...Sorry, you're "); 

      if (i < answer) 
       System.out.println("too low"); 
      else 
       System.out.println("too high"); 
      System.out.println("Try again!\n"); 
     } 
    } while(answer != i); 
} 
+2

Потому что с вызовом 'System.in.read()', вы получаете один 'char'. Вы должны построить «Сканер» и называть его методом 'nextInt()', например: «Сканирование сканера = новый сканер (System.in); i = scan.nextInt(); ' – Majora320

+1

' System.in.read() 'принимает следующий ** байт ** не следующий ** int **. Существует большая разница –

+1

Вы должны использовать отладчик или даже просто распечатать переменную, чтобы увидеть, что делает ваш код на самом деле, прежде чем вы просите без какого-либо теста. Если да, напишите их на вопрос. – Nier

ответ

1

Потому что System.in.read() возвращает char объект, представляющий символ, который был набран. Передача его в int вернет вместо фактического целого числа, который был набран, объект char, который имеет совершенно другое значение.

Для решения этой проблемы вы должны использовать класс Scanner, который имеет метод nextInt(), который идеально подходит для этого. Он будет вызывать InputMismatchException с недопустимым вводом, поэтому, если вы хотите обработать ошибки, вы должны это поймать.

Вот рабочий (и немного очищен) версия кода:

import java.util.Scanner; 
import java.util.InputMismatchException; 

public class Guess { 
    public static void main(String[] args) { // No need to throw IOException 
     int input = -1, answer = 64; // Initialize input for if the user types 
            // in invalid input on the first loop 

     Scanner scan = new Scanner(System.in); 

     do { 
      System.out.println("I'm thinking of a number between 1 and 100."); 
      System.out.println("Can you guess it?"); 

      try { 
       input = scan.nextInt(); 
      } catch (InputMismatchException ex) { 
       System.out.println("Invalid Input!"); 
       continue; // Skips to the next loop iteration if invalid input 
      } 

      if (input == answer) 
       System.out.println("**RIGHT**"); 
      else { 
       System.out.println("...Sorry, you're too " + (input < answer ? "low" : "high")); 
       //^Ternary operator; you may not have learned this yet, but it 
       // just does a conditional return (if the value before the '?' is 
       // true, then return the value before the ':'; else return the 
       // value after.) 
       System.out.println("Try again!"); 
      } 
     } while (answer != input); 
    } 
} 
+0

Это отлично работало. Большое вам спасибо за вашу помощь. Я не знал, что System.in.read() не вернет int. Пример, из которого я шел, - это использовать буквы вместо цифр. Я пытался изменить этот код. Теперь имеет смысл! – Magdalina08

+0

Добро пожаловать! : 3 – Majora320