每个循环向数组添加数字

时间:2015-11-09 15:10:01

标签: java arrays random

我最近做了一个快速程序,让计算机猜出你输入的数字。我只是用它来向朋友展示一个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.");
}

6 个答案:

答案 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.");
        }

我希望有所帮助!