2016-02-06 2 views
-2
public class Test { 
    public static void main(String[] args) { 
     System.out.println("Welcome to Siddharth's number guessing game. \nThink of a number between 1 and 100 and press 1 to continue"); 
     Scanner x= new Scanner(System.in); 
     if (x.nextInt()==1) 
     { 
     int high=100; 
     int low=0; 
     int guess=(high+low)/2; 
     System.out.println("Is your number "+ guess+"? Press 0 if yes, press 1 if your number is higher than this number or press 2 if your number is lower than this number!"); 
     Scanner y= new Scanner(System.in); 
     int ans=y.nextInt(); 
      while(ans!=0) 
      { 
       if (ans==1) 
       { 
        low=ans; 
        guess=(high+low)/2; 
        System.out.println("Is your number "+ guess+"? Press 0 if yes, press 1 if your number is higher than this number or press 2 if your number is lower than this number!"); 
        Scanner y1= new Scanner(System.in); 
        ans=y1.nextInt(); 
       } 
       else if (ans==2) 
       { 
        high=ans; 
        guess=(high+low)/2; 
        System.out.println("Is your number "+ guess+"? Press 0 if yes, press 1 if your number is higher than this number or press 2 if your number is lower than this number!"); 
        Scanner y2= new Scanner(System.in); 
        ans=y2.nextInt(); 
       } 

      } 
      System.out.println("The number you thought is"+guess+"! Thanks for playing!"); 
     } 
     else 
     { 
      System.out.println("No problem. Restart the program and press 1 when ready!"); 
     } 
    } 

} 

Я подумал, что номер 22, и вошел 2, когда он спросил меня, если мой номер равен 50. Затем он сразу же пошел в 1. Что бы я ни вводил, он показывает 1 как вместо 50, 25, 12 и т. д. Я сделал то же самое в Python и C, и они отлично работают.Java number guessing game weird output

+2

Почему вы создаете все эти 'Scanners'? – Idos

ответ

4

Итак, первая проблема заключается в том, что вы назначаете ans к high и low вместо guess.

Тогда, если я могу дать вам несколько советов:

  1. не создают новый сканер каждый раз. Вместо этого всегда используйте один и тот же сканер x
  2. не ставьте общие действия внутри каждого блока if/else. Вместо этого выведите общие операции снаружи.
  3. Один раз вы можете дать инструкции (1 для более высоких и т. Д.), А затем просто спросить: «Это ваш номер XX? (0: да, 1: более высокий, 2: ниже)». Это более читаемо.

Вот улучшенная версия, но я уверен, что вы можете сделать это даже лучше:

public static void main(String[] args){ 
    System.out.println("Welcome to Siddharth's number guessing game. \nThink of a number between 1 and 100 and " 
      + "press 1 to continue"); 

    Scanner x = new Scanner(System.in); 

    if(x.nextInt() == 1){ 

     int high = 100; 
     int low = 0; 
     int guess = (high + low)/2; 

     System.out.println("Is your number " + guess + "? Press 0 if yes, press 1 if your number is higher than " + 
       "this number or press 2 if your number is lower than this number!"); 


     while(true){ 

      int ans = x.nextInt(); 
      if(ans == 0){ 
       break; 

      }else if(ans == 1){ 
       low = guess; 

      }else if(ans == 2){ 
       high = guess; 

      } 

      guess = (high + low)/2; 
      System.out.printf("Is your number %d ? (0: yes, 1: higher, 2:lower) ", guess); 
     } 

     System.out.println("The number you thought of is " + guess + "! Thanks for playing!"); 

    }else{ 
     System.out.println("No problem. Restart the program and press 1 when ready!"); 
    } 
} 
+0

Большое вам спасибо за ваши предложения !!! Странно, что я сделал эту ошибку: P И за это «Номер, который вы подумали», я работал над ним и все же закончил :) Ваши предложения полезны. Я буду использовать их. PS: Я не думал, что мы можем использовать сканер более одного раза (я новичок в Java и новичок в «сканерах». Еще раз спасибо –

4

Заменить high = ans и low = ans по high = guess, low = guess - для перемещения соответствующего «угадывание диапазона» границы не значение входа (1 или 2), а к значению предыдущего предположения, как в бинарном поиске.