我想从我的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)
答案 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 );
}
}