从ArrayList <string>获取随机项

时间:2018-02-10 18:15:34

标签: java

我想从我的ArrayList中选择一个随机字符串,然后打印该字符串。 这是我的代码:

 public class Operator {

Random rand = new Random();
ArrayList<String> myArray = new ArrayList<String>();
public void CreateArrayList() {
     myArray.add("add");
     myArray.add("subtract");
     myArray.add("multiply");
     myArray.add("divide");
     myArray.add("remainder");
     myArray.add("greaterthan");
     myArray.add("lessthan");
     myArray.add("max");
     myArray.add("min");
     myArray.add("power");
     try {
            FileReader inFile = new FileReader("data/numbers2.txt");
            Scanner scanner = new Scanner(inFile);
            String line = scanner.nextLine();
            System.out.println(line);

            scanner.close();
        } 
        catch (Exception ex) {
            ex.printStackTrace();}
    }
{

}

public void showOperations() {
    int x = (int) Math.floor(Math.random()*10);
    int y = (int) Math.floor(Math.random()*10);
    int z = rand.nextInt(10);
    System.out.println(x+" "+ myArray.get( z )+" "+ y );
    }
}

输出应该是例如&#34; 3添加4&#34;。但是,有时我运行代码,我得到了

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 4, Size: 0 at java.util.ArrayList.rangeCheck(Unknown Source) at java.util.ArrayList.get(Unknown Source) at hw2p2.Operator.showOperations(Operator.java:42) at hw2p2.Launcher.main(Launcher.java:9)

2 个答案:

答案 0 :(得分:1)

rand.nextInt(10);会得到一个随机数,与您的列表内容无关。

您需要使用10

传递列表的大小,而不是字面myArray.size()

其次,如果您希望代码除了从空列表中选择随机元素以外的任何其他内容,您还需要调用其他方法

它是一个列表,而不是一个数组

答案 1 :(得分:0)

您实际上从未创建过arrayList,因此当您在showoperations方法中调用该数组时,它最终会尝试对空数组执行操作。另外,我调整了z的计算,这样无论arrayList的大小如何,它都会给你一个数字。

    import java.io.FileReader;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;


public class Operator {

Random rand = new Random();
ArrayList<String> myArray = new ArrayList<String>();

public void createArrayList() {
     myArray.add("add");
 myArray.add("subtract");
 myArray.add("multiply");
 myArray.add("divide");
 myArray.add("remainder");
 myArray.add("greaterthan");
 myArray.add("lessthan");
 myArray.add("max");
 myArray.add("min");
 myArray.add("power");
 try {
        FileReader inFile = new FileReader("data/numbers2.txt");
            Scanner scanner = new Scanner(inFile);
            String line = scanner.nextLine();
            System.out.println(line);

            scanner.close();
        } 
        catch (Exception ex) {
            ex.printStackTrace();}
    }

public void showOperations() {
    createArrayList();
    int x = (int) Math.floor(Math.random()*10);
    int y = (int) Math.floor(Math.random()*10);
    int z = rand.nextInt(myArray.size());
    System.out.println(x+" "+ myArray.get( z )+" "+ y );
    }
}