我最近做了一个快速程序,让计算机猜出你输入的数字。我只是用它来向朋友展示一个While循环的例子。我决定让它变得更复杂,但我不知道该怎么做。
我希望将每个随机猜测添加到数组中,以便它不会多次猜测相同的数字。
Scanner scan = new Scanner (System.in); // Number to guess //
Random rand = new Random(); // Generates the guess //
int GuessNum = 0, RandGuess = 0;
System.out.println("Enter a number 1 - 100 for me to guess: ");
int input = scan.nextInt();
if (input >= 1 && input <= 100)
{
int MyGuess = rand.nextInt (100) + 1;
while ( MyGuess != input)
{
MyGuess = rand.nextInt (100) + 1;
GuessNum++;
}
System.out.println ("I guessed the number after " + GuessNum + " tries.");
}
答案 0 :(得分:6)
您可能想要使用CALayer
(动态增加数组)
ArrayList
如果您想查看该号码是否已添加到arraylist
中ArrayList<Integer> list = new ArrayList<Integer>();
list.add(num);
if(list.contains(num))
{
System.out.println("You already tried " + num);
}
也是更好的选择。它与Set
相同,但不允许重复。
ArrayList
答案 1 :(得分:3)
Java中的数组具有固定的大小。分配数组后,只允许添加元素,直到您预先分配的元素数。这在您的情况下不会是一个大问题,因为值限制为100,但您有更好的选择:
Java库提供动态增长的集合。在您的情况下,HashSet<Integer>
将是一个不错的选择:
HashSet
可以随时增长到任意大小HashSet
是否有号码是一种快速操作另一种解决方案是制作101 boolean
s:
boolean[] seen = new boolean[101];
现在,您可以通过将seen[myGuess]
作为false
进行测试来检查之前是否看过该号码,并在看到新号码时设置seen[myGuess] = true
。这种方法也很快。但是,您需要跟踪您拥有的可用数量,因为在100次猜测之后,1到100的范围将耗尽,因此尝试生成额外的数字将成为无限循环。
答案 2 :(得分:3)
Set
是该功能的适当容器。您可以这样定义:
Set<Integer> previous = new HashSet<>();
并获得一个您之前未曾尝试过的随机数
while (previous.contains(MyGuess))
MyGuess = rand.nextInt(100) + 1;
previous.add(MyGuess);
这将从rand
对象中获取新的随机数,直到找到previous
中没有的对象。然后将其添加到previous
以进行下一次迭代。
答案 3 :(得分:2)
使用TableB
执行此操作。 Set中的值是唯一的,因此这是存储已经猜到的值的简单方法。
HashSet<Integer>
方法是您如何在
答案 4 :(得分:2)
一个非常简单的例子是:
public static int[] randomArray(){
int number = Integer.parseInt(JOptionPane.showInputDialog("How many numbers would you like to save?: ")); //Get Number of numbers from user
int[] array = new int[number]; //Create the array with number of numbers (by User)
for(int counter = 0; counter < number; counter++){ //For loop to get a new input and output every time
int arrayString = (int) (Math.random() * 10);
array[counter] = arrayString;
System.out.println("Number " + (counter + 1) + " is: " + array[counter]); //Print out the number
}
return array;
}
此示例在每次循环重复时添加数字,只需将随机数替换为您想要的数字。
答案 5 :(得分:1)
最简单的方法是添加一个ArrayList,然后检查列表是否包含随机值:
Ar首先制作新的ArrayList:
ArrayList<Integer> myGuesses = new ArrayList();
第二步是将随机值添加到列表中:
ArrayList<Integer> myGuesses = new ArrayList();
现在你只需要检查列表是否包含了生成新值并计算你的trys的值:
if(myGuesses.contains(MyGuess))
{
//your code
}
我将此应用于您的代码:
Scanner scan = new Scanner(System.in); // Number to guess //
Random rand = new Random(); // Generates the guess //
int GuessNum = 0, RandGuess = 0;
ArrayList<Integer> myGuesses = new ArrayList();
System.out.println("Enter a number 1 - 100 for me to guess: ");
int input = scan.nextInt();
if (input >= 1 && input <= 100) {
int MyGuess = rand.nextInt(100) + 1;
while (MyGuess != input) {
if(myGuesses.contains(MyGuess))
{
MyGuess = rand.nextInt(100) + 1;
GuessNum++;
myGuesses.add(MyGuess);
}
}
System.out.println("I guessed the number after " + GuessNum + " tries.");
}
我希望有所帮助!