你将编写一个Java程序来玩Pico,Fermi,Bagel的游戏。 以下是游戏规则:
计算机将生成一个秘密"三位数随机。 第一个数字不是0,所有数字都不同。 用户试图猜测数字。如果用户猜对了, 然后比赛就结束了。
如果没有,计算机会提示并且玩家再次尝试。该 提示:
对于在适当位置与秘密号码匹配的每个数字,计算机打印" Fermi"
对于匹配但未在适当位置的每个数字,计算机打印" Pico"
如果没有数字匹配,电脑会打印" Bagels"
该程序将有一个主类和一个Bagels类。百吉饼 class将调用其他3种方法
生成密码
确定当前猜测是否为胜利者
- 评估当前的猜测和打印提示
醇>
我的问题 - 当我运行该程序时,它要求我输入一个3位数的代码,但它只是一直要求我输入一个3位数代码而不是比较用户&#39 ; s猜测随机生成数字的数字。我假设我在课堂或方法上做了一些愚蠢的事情,因为我们不久前就学会了它们,但它们仍然让我感到困惑。
该计划的第一部分是我的主要课程,第二部分是Bagels课程。
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 :(得分:1)
如果不自行测试,看起来错误就在Assignment类的main方法中。当你创建百吉饼对象时,首先发生的是它的playGame方法被调用。
Bagels myBagels = new Bagels();
myBagels.playGame() ;
你的playGame方法依赖于与randNumber的比较,但是randNumber永远不会被初始化! Java成员变量获得默认值,0表示整数(参见:Default Values and Initialization in Java)。因此,除非用户输入" 0",否则循环条件将为真(猜测不等于0),并且将再次提示用户。
我将提出的一个建议是编写一个带有单个int值的构造函数,并将randNumber设置为该值。