我试图在Java中生成一个包含25个不重复随机数的列表,但我一直收到Missing Return Statement错误。可以看出,我尝试在调用方法之前先放return。不确定缺少什么。它也不适用于return (rando)
import java.util.*;
public class arrayList{
ArrayList<Integer> checkRandom;
ArrayList<Integer> array4;
ArrayList<Integer> array2;
ArrayList<Integer> array3;
public int addRandom(){
Random rnd = new Random();
int b=0;
for (int i=0; i<26; i++){
int rando = rnd.nextInt(101);
if (checkRandom.indexOf(rando) != -1){
return addRandom();
}
else{
checkRandom.add(rando);
array4.add(rando);
return (rando);
}
}
for (int j=0;j<26;j++){
int right;
right = checkRandom.get(j);
System.out.println(right);
}
return -1;
}
public static void main(String args[]){
arrayList randomGen = new arrayList();
randomGen.addRandom();
}
}
Exception in thread "main" java.lang.NullPointerException
at arrayList.addRandom(arrayList.java:14)
at arrayList.main(arrayList.java:37)
我建议您使用一个更简单的方法,使用Java8流。例如,要创建一个由0和100之间的26个不同随机整数组成的数组:
int[] randomArray = new Random().ints(0, 101).distinct().limit(26).toArray();
为了更详细地解释,这句话可以解释为:创建一个随机数生成器,使用它生成0到100之间的无尽随机数流,删除任何重复,获取流中的前26个数字,并将它们转换为int
数组。
流非常强大。一旦生成器处于这种形式,添加sorted
运算符或filter
,或者将它们收集到List
或Map
中都是很简单的。
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
Random rand = new Random();
while (list.size() < 25) {
int index = rand.nextInt(101);
if (!list.contains(index)) {
list.add(index);
}
}
System.out.println(list);
}
}
初始化addRandom
方法中的方法局部变量b,并在for循环中重新分配它,最终返回变量b public int addRandom(){
Random rnd = new Random();
int b=0;
for (int i=0; i<26; i++){
int rando = rnd.nextInt(101);
if (checkRandom.indexOf(rando) != -1){
b= addRandom();
}
else{
checkRandom.add(rando);
array4.add(rando);
b=rando;
}
}
return b;
}
您的方法
public int addRandom(){
Random rnd = new Random();
for (int i=0; i<26; i++){
int rando = rnd.nextInt(101);
if (checkRandom.indexOf(rando) != -1){
return addRandom();
}
else{
checkRandom.add(rando);
array4.add(rando);
return (rando);
}
}
}
结尾没有return语句。方法签名声明您必须返回一个整数。编译器直到运行时才知道for语句将被执行。因此,您必须处理不执行for循环的情况。由于您可以判断它每次都会被执行,因此添加一个return-1;在方法结束之前将解决您的问题。
即
public int addRandom(){
Random rnd = new Random();
for (int i=0; i<26; i++){
int rando = rnd.nextInt(101);
if (checkRandom.indexOf(rando) != -1){
return addRandom();
}
else{
checkRandom.add(rando);
array4.add(rando);
return (rando);
}
}
return -1;
}
您可以通过创建类的实例(即)来调用该方法
arrayList randomGen = new arrayList();
randomGen.addRandom();
顺便说一句,它是java中将类命名为CamelCased的标准。即ArrayList。尽管如此,您可能需要将其重命名为其他名称,这样就不会将您的类与java.util.ArrayList(一个流行的java类)
如果要使用递归,则不需要循环。例如:
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Test {
List<Integer> randomList = new ArrayList<Integer>();
Random rnd = new Random(); // do not create new Random object in each function call.
final static int LIST_SIZE = 25;
public void addRandom(List someList) {
if (randomList.size() < LIST_SIZE) {
int random = rnd.nextInt(101); // LIST_SIZE must be lesser than 101 otherwise you will got infinite recursion.
if (!randomList.contains(random)) {
randomList.add(random);
someList.add(random);
}
addRandom(someList);
}
}
public static void main(String args[]) {
Test test = new Test();
List<Integer> array4 = new ArrayList<Integer>();
test.addRandom(array4);
for (Integer value : array4) {
System.out.println(value);
}
}
}