2014-10-20 62 views
0

你将编写一个Java程序来玩Pico,Fermi,Bagel的游戏。 这里是游戏规则:类,方法和随机数生成

电脑会随机产生一个“秘密”的三位数字。 第一个数字不会是0,所有的数字都会不同。 用户尝试猜测数字。如果用户猜测正确,则游戏结束。

如果没有,电脑会给出提示,玩家再试一次。该 提示:

  • 为每个保密号码,电脑打印“费米”

  • 匹配的适当地方每个匹配位数的数字,但不能在适当的位置,计算机打印“微微”

  • 如果没有数字匹配,计算机打印“百吉饼”

程序将有一个主要课程和一个百吉饼课程。百吉饼 类将调用其他3种方法

  1. 生成秘密数

  2. 确定当前的猜想是否是一个胜利者

  3. 评估目前的猜测和打印提示

我的问题 - 当我运行程序时,它要求我输入一个3位数的代码,但是它只是要求我输入一个3位数的代码,而不是将用户的猜测数字与随机生成的数字进行比较。我假设我对这些类或方法做了一些愚蠢的事情,因为我们不久前才了解到它们,并且仍然让我困惑。

程序的第一部分是我的主类,第二部分是百吉饼类。

package assignment.iii; 
import javax.swing.JOptionPane; 
import java.util.Scanner; 

public class AssignmentIII { 

public static void main(String[] args) 
    { 
    int playagain = JOptionPane.showConfirmDialog(null, "Would you like to play?", "Message", JOptionPane.YES_NO_OPTION); 

    while (playagain == JOptionPane.YES_OPTION) {  

    Bagels myBagels = new Bagels(); 
    myBagels.playGame() ;  
    myBagels.randNumber = 0; 
    playagain = JOptionPane.showConfirmDialog(null, "Would you like to play again?", "Message", JOptionPane.YES_NO_OPTION); 
} 
} 
} 



// start of Bagels class 

package assignment.iii; 
import java.util.Random; 
import javax.swing.JOptionPane; 

public class Bagels{ 


public int randNumber; 
private int Guess; 
private int Rand1, Rand2, Rand3; 
private int Guess1, Guess2, Guess3; 
private int guessCount; 


public void playGame() 
{ 

    do { 
    Guess = Integer.parseInt(JOptionPane.showInputDialog("Enter a three digit number")); 
    } 
    while (Guess != randNumber);     

} 

private int generateSecretNumber() 
{ 
     Random randN = new Random(); 
     return randN.nextInt(999)+1; 
} 

private void printHint(String guess)   
{ 
    if(randNumber == Guess) 
     System.out.println("Correct"); 

     else 
     { 
     Guess1 = (Guess)/100; 
     Guess2 = (Guess%100)/10; 
     Guess3 = (Guess%100)%10; 
     } 

    if(Guess1 == Rand1) 
    { 
     System.out.println("Fermi"); 
    } 
    if(Guess2 == Rand2) 
    { 
     System.out.println("Fermi"); 
    } 
    if(Guess3 == Rand3) 
    { 
     System.out.println("Fermi"); 
    } 
    if(Guess2 == Rand1) 
    { 
     System.out.println("Pico"); 
    } 
    if(Guess3 == Rand1) 
    { 
     System.out.println("Pico"); 
    } 
    if(Guess1 == Rand2) 
    { 
     System.out.println("Pico"); 
    } 
    if(Guess3 == Rand2) 
    { 
     System.out.println("Pico"); 
    } 
    if(Guess1 == Rand3) 
    { 
     System.out.println("Pico"); 
    } 
    if(Guess2 == Rand3) 
    { 
     System.out.println("Pico"); 
    } 
    else if(Guess1 != Rand1 && Guess1 != Rand2 && Guess1 != Rand3 && 
      Guess2 != Rand1 && Guess2 != Rand2 && Guess2 != Rand3 && 
      Guess3 != Rand1 && Guess3 != Rand2 && Guess3 != Rand3) 
    { 
     System.out.println("Bagels"); 
    } 
    guessCount++; 
    } 
} 
+0

还不确定为什么只是反复要求输入3位数字?我认为它在我的百吉饼类中与这有关,我的generateSecretNumber和printHint方法表示它们未被使用?但我不知道如何使它们在程序中使用? – Alex 2014-10-20 02:28:59

回答

1

没有自己测试它,它看起来像错误是在你的Assignment类的主要方法。当您创建百吉饼对象时,发生的第一件事就是playGame方法被调用。

Bagels myBagels = new Bagels(); 
myBagels.playGame() ; 

您的playGame方法依赖于randNumber的比较,但randNumber永远不会初始化! Java成员变量获取默认值,0表示整数(请参阅:Default Values and Initialization in Java)。因此,除非用户输入“0”,否则循环条件将为真(猜测不等于0),并且将再次提示用户。

我会做的一个建议是编写一个构造函数,该构造函数接受一个int值并将randNumber设置为该值。

+0

所以我在主类中初始化它?我尝试在字符串下的主类中做(int randNumber = 0;),但它只是说没有使用randNumber。或者我需要将它添加到playGame下的百吉饼类中? – Alex 2014-10-20 01:39:23

+0

没错,那是因为randNumber是'百吉圈'类中的一个字段。您创建的名为myBagels的“百吉饼”实例具有randNumber字段。因此,从该类外部(如在您的主要方法中),您可以使用'myBagels.randNumber'访问它。我会看看[这个页面](http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html),并尝试为你的Bagels类添加一个构造函数,它接受一个int值,并使用它初始化randNumber字段。调用构造函数会看起来像'百吉饼myBagels =新百吉饼(10);'将其初始化为10。 – 2014-10-20 01:49:27