类,方法和随机数生成

时间:2014-10-20 01:17:25

标签: java class random methods numbers

  

你将编写一个Java程序来玩Pico,Fermi,Bagel的游戏。   以下是游戏规则:

     

计算机将生成一个秘密"三位数随机。   第一个数字不是0,所有数字都不同。   用户试图猜测数字。如果用户猜对了,   然后比赛就结束了。

     

如果没有,计算机会提示并且玩家再次尝试。该   提示:

     
      
  • 对于在适当位置与秘密号码匹配的每个数字,计算机打印" Fermi"

  •   
  • 对于匹配但未在适当位置的每个数字,计算机打印" Pico"

  •   
  • 如果没有数字匹配,电脑会打印" Bagels"

  •   
     

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

     
      
  1. 生成密码

  2.   
  3. 确定当前猜测是否为胜利者

  4.   
  5. 评估当前的猜测和打印提示
  6.   

我的问题 - 当我运行该程序时,它要求我输入一个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++;
   }
}

1 个答案:

答案 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设置为该值。