使用Java将字符串输入到数组的随机位置

时间:2014-11-15 13:04:03

标签: java arrays

我正在尝试编写一个包含十个名字的数组的程序。我要求使用扫描仪输入名称,我希望为这十个名称分配一个随机的阵列位置。

这是我的代码到目前为止,但我几乎被卡住了。

import java.util.Scanner

class RandomArray {

    public static void main(String[] args) {

        String [] NamesArray = new String[10]
        Scanner sc = new Scanner(System.in){
        System.out.println("Input first name: ");

    }
}

我是一个完全的初学者。感谢

4 个答案:

答案 0 :(得分:1)

您可以尝试使用列表而不是数组来存储名称。这将允许您按顺序添加它们并稍后将其随机播放。

首先,您要创建一个ArrayList来存储名称:

ArrayList<String> list=new ArrayList<String>();

然后得到名字。我会建议一个循环来节省大量的打字。然后,在输入每个名称时,将其添加到列表中(替换&#34;名称&#34;使用您要添加的名称):

list.add(name);

然后你可以洗牌:

Collections.shuffle(list);

然后遍历列表并打印它们(或者你想用它们做什么)。您也可以将列表转换为数组:

list.toArray(new String[list.size()]);

答案 1 :(得分:0)

您可以使用两种总体策略。

  1. 按照输入的顺序将名称放入数组中,然后将其随机播放。
  2. 首先生成一个从0到9的整数数组,然后对这些整数进行混洗;然后使用此数组来确定每个名称的放置位置。(请记住,数组的索引是从0开始。)
  3. 我会选择第一个:它似乎更容易一些。

    有关如何有效地改组数组的详细信息可以找到in this question

    顺便说一句,如果你不需要它是一个数组,你可以使用ArrayList<String>,这样你就可以使用标准的Java方法来混淆它:Collections.shuffle()方法

答案 2 :(得分:0)

你可以使用它有一个shuffle方法的类集合:

String [] namesArray = new String[10];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < namesArray.length; i++) {
    System.out.print("Input name: ");
    namesArray[i] = sc.next();
}
System.out.println("Input: " + Arrays.toString(namesArray));
Collections.shuffle(Arrays.asList(namesArray));
System.out.println("Input shuffled (random): " + Arrays.toString(namesArray));

答案 3 :(得分:0)

在chiastic-security评论的帮助下,我为你编写了代码。作为初学者,我会发现很难理解。

// Method 1. Put the names into the array in the order they're entered, and then shuffle them afterwards.

String[] NamesArray = new String[10];
Scanner sc = new Scanner(System.in);

for (int i = 0; i < NamesArray.length; i++) {
    System.out.print("Enter name No. " + (i + 1) + ": ");

    String name = sc.next();
    NamesArray[i] = name;
}
swapShuffle(NamesArray);

for (String name : NamesArray) {
    System.out.println(name);
}

或者,

// Method 2. Start by generating an array of integers from 0 to 9, and shuffle these integers; then use this array to determine where to place each name as it comes in.
Integer[] nameOrder = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
swapShuffle(nameOrder);

String[] NamesArray = new String[10];
Scanner sc = new Scanner(System.in);

for (int i = 0; i < NamesArray.length; i++) {
    System.out.print("Enter name No. " + (i + 1) + ": ");

    String name = sc.next();
    NamesArray[nameOrder[i]] = name;
}

其中两种方法都使用这种静态方法进行混洗:

public static void swapShuffle(Object[] objects) {
    Random r = new Random();

    for (int i = 0; i < objects.length; i++) {
        int n = r.nextInt(objects.length);

        Object o = objects[i];
        objects[i] = objects[n];
        objects[n] = o;
    }

}