2014-10-04 129 views
1

我正在尝试在Java中建立一个数字猜测游戏,它与通常的数字不同,你猜数字,程序会告诉你它是高还是低。我试图建立一个程序猜测数字的地方,你会说它是高还是低,直到程序找到你选择的号码。Java猜数字游戏问题

我遇到了“if”语句,程序猜测的数字太低时出现问题。

的具体问题是在这里:

if (hilow.equals("l")) 
     { 
      middle = middle * 2; 
      System.out.println(middle); 
      numbGuesses++; 
     } 

整个程序到目前为止是这样的:

import java.util.*; 

public class NumbGuess 
{ 
    public static void main(String args[]) 
    { 
     int numbGuesses = 0; 
     boolean win = false; 
     int hi = 1000000; 
     int low = 0; 
     Scanner input = new Scanner(System.in); 
     int middle = hi/2; 
     System.out.println(middle); 


    while (win == false) 
    { 
     String hilow = input.nextLine(); 

     if (hilow.equals("h")) 
     { 
      middle = middle/2; 
      System.out.println(middle); 
      numbGuesses++; 
     } 

     if (hilow.equals("l")) 
     { 
      middle = middle * 2; 
      System.out.println(middle); 
      numbGuesses++; 
     } 

     if (hilow.equals("y")) 
     { 
      win = true; 
      System.out.println("It took: " + numbGuesses + " guesses"); 
     } 
    } 
} 
} 

我遇到的问题是一个永久的循环每当数量太少:

enter image description here

我想我需要CH为了得到一个工作结果,中间由什么操作。

回答

2

你的逻辑是有缺陷的。当数字太低时,不应该乘以2,而当它太高时,不应该只用2除。

新的猜测应该在范围的中间。如果你的第一个猜测是500000,并且用户说它太低,那么该数字在500000和最大数量(1000000)之间,所以新的猜测应该是(1000000-500000)/2=750000而不是500000*2。如果第一个猜测值太高,则该数字在最小数字(0)和500000之间,所以下一个猜测应该是(500000-0)/2=250000

+0

好吧,谢谢。我是新手,这是我的小宠物项目。你的回应非常有帮助。 – 2014-10-04 15:11:47

1

你的问题是与高和低if陈述。您需要在每次猜测时调整边界,例如,如果猜测值过高,则需要将新的high界限设置为猜测值。同样,如果猜测值太低,则需要将新的low界限设置为猜测值。

0

问题不是永久性循环。这个程序正在做你到底在问什么:

它说500000,你说它除以2(= 250000)。然后,你说它乘以2(= 500000)。到目前为止......

问题出在你的逻辑上。您应该在程序收到信息时正确确定限制(hilow)。例如,如果程序猜到500000,并且你认为它太高,现在你的限制在1和499999之间(= 500000-1)。如果它太低,现在你的限制在500001(= 500000 + 1)和1000000之间。你猜你重新计算middle你的hilow(hi+low)/2)。

希望有所帮助。

0

你用来改变计算机猜测的逻辑并不完全正确。你想要做什么(以及你想要做什么)是二分查找

在你的例子中,50000太高,25000太低,所以下一个猜测不应该加倍25000,它应该在50000和25000之间,或者类似于37500。

一般来说,你应该追踪'最高估计太高'和'最高估计太低',下一个猜测应该是他们之间的一半。

0

您应该动态更改,而不是保持它们静态。根据用户的响应,程序应该改变的价值,并减少或分别递增当前中间替换它,然后通过平均新喜设置新中间

这里是我的尝试,它似乎工作:

import java.util.*; 

public class NumbGuess 
{ 
    public static void main(String args[]) 
    { 
     int numbGuesses = 0; 
     boolean win = false; 
     int hi = 1000000; 
     int low = 0; 
     Scanner input = new Scanner(System.in); 
     int middle = hi/2; 
     System.out.println(middle); 


    while (win == false) 
    { 
     String hilow = input.nextLine(); 

     if (hilow.equals("h")) 
     { 
      hi = middle - 1; 
      middle = (low + hi)/2; 

      System.out.println(middle); 
      numbGuesses++; 
     } 

     if (hilow.equals("l")) 
     { 
      low = middle + 1; 
      middle = (low + hi)/2; 

      System.out.println(middle); 
      numbGuesses++; 
     } 

     if (hilow.equals("y")) 
     { 
      win = true; 
      System.out.println("It took: " + numbGuesses + " guesses"); 
     } 
    } 
} 
}