如何检查一个数字是否在一个范围内
How to check if a number is between a range
我正在学习的在线课程有问题。问题是:
给定一个整数 x,编写一个程序生成 x 和 0 之间的随机数,直到该范围内的每个数字至少生成一次。生成此范围内的所有数字后,程序应显示生成的数字。
我编写了一个我认为可以解决此问题的程序,但在检查数字是否在范围内时遇到问题。到目前为止,这是我的代码:
public static void main(String[] args) {
Random generator = new Random();
ArrayList<Integer> range = new ArrayList<Integer>();
ArrayList<Integer> generated = new ArrayList<Integer>();
int x = 10;
int count = 0;
for(int i = 0; i<x+1; i++){
range.add(i);
}
while(range.isEmpty() != true){
int temp = generator.nextInt(x-1);
count++;
generated.add(temp);
if(range.contains(temp)){
range.remove(temp);
}
}
}
}
我的想法是先创建两个数组列表。第一个将保存 0 和给定 x 之间的所有数字。第二个将包含生成的随机数。然后我用 0 到 x 之间的范围填充范围 arraylist。然后我的 While 循环检查这个范围列表看它是否为空。如果没有,它会生成一个随机数,并将其添加到我的第二个数组列表中。然后我检查这个数字是否在 arraylist 范围内——如果是,则将其删除并继续。我遇到的问题是 运行 进入 IndexOutOfBoundsException 几次后。我认为这是因为我正在从 arraylist 中删除生成的数字。谁能帮我解决这个问题
编辑:我不能使用任何集合或其他 API。这部分课程主要是关于使用数组和循环等,而不是高级 Java 东西。
您可以将 range.remove(temp); 替换为 range.removeIf(t -> t == temp);
Random generator = new Random();
ArrayList<Integer> range = new ArrayList<Integer>();
ArrayList<Integer> generated = new ArrayList<Integer>();
int x = 10;
int count = 0;
for(int i = 0; i<x+1; i++){
range.add(i);
}
while(range.isEmpty() != true){
int temp = generator.nextInt(x-1);
count++;
generated.add(temp);
if(range.contains(temp)){
range.removeIf(t -> t == temp);
}
}
或者您可以使用迭代器从列表中移除
for (Iterator<Integer> it = range.iterator(); it.hasNext(); ) {
Integer obj= it.next();
if (obj == temp) {
// Remove the current element from the iterator and the list.
it.remove();
break;
}
}
你的逻辑还有问题
int temp = generator.nextInt(x-1);您生成的随机数不包含所有数字。它应该是 int temp = generator.nextInt(x+2);
remove
是一个重载方法,有 remove(int)
删除指定索引处的项目,还有 remove(T)
删除等于列表中的第一个对象您传入的参数
由于您将 int 传递给方法而不是 Integer,因此选择第一个方法
对代码最简单的修改是将 range.remove(temp);
替换为 range.remove(range.indexOf(temp));
或 range.remove((Integer)temp)
另外你必须调用generator.nextInt(x+1);
否则程序会陷入死循环
希望以下能满足您的要求。
Random random = new Random();
int x = 3;
List<Integer> range = new ArrayList<>();
for(int i = 0; i <x+1; i++) {
range.add(i);
}
List<Integer> list = new ArrayList<>();
while (!list.containsAll(range)) {
list.add(random.nextInt(x + 1));
}
System.out.println(list);
我正在学习的在线课程有问题。问题是:
给定一个整数 x,编写一个程序生成 x 和 0 之间的随机数,直到该范围内的每个数字至少生成一次。生成此范围内的所有数字后,程序应显示生成的数字。
我编写了一个我认为可以解决此问题的程序,但在检查数字是否在范围内时遇到问题。到目前为止,这是我的代码:
public static void main(String[] args) {
Random generator = new Random();
ArrayList<Integer> range = new ArrayList<Integer>();
ArrayList<Integer> generated = new ArrayList<Integer>();
int x = 10;
int count = 0;
for(int i = 0; i<x+1; i++){
range.add(i);
}
while(range.isEmpty() != true){
int temp = generator.nextInt(x-1);
count++;
generated.add(temp);
if(range.contains(temp)){
range.remove(temp);
}
}
}
}
我的想法是先创建两个数组列表。第一个将保存 0 和给定 x 之间的所有数字。第二个将包含生成的随机数。然后我用 0 到 x 之间的范围填充范围 arraylist。然后我的 While 循环检查这个范围列表看它是否为空。如果没有,它会生成一个随机数,并将其添加到我的第二个数组列表中。然后我检查这个数字是否在 arraylist 范围内——如果是,则将其删除并继续。我遇到的问题是 运行 进入 IndexOutOfBoundsException 几次后。我认为这是因为我正在从 arraylist 中删除生成的数字。谁能帮我解决这个问题
编辑:我不能使用任何集合或其他 API。这部分课程主要是关于使用数组和循环等,而不是高级 Java 东西。
您可以将 range.remove(temp); 替换为 range.removeIf(t -> t == temp);
Random generator = new Random();
ArrayList<Integer> range = new ArrayList<Integer>();
ArrayList<Integer> generated = new ArrayList<Integer>();
int x = 10;
int count = 0;
for(int i = 0; i<x+1; i++){
range.add(i);
}
while(range.isEmpty() != true){
int temp = generator.nextInt(x-1);
count++;
generated.add(temp);
if(range.contains(temp)){
range.removeIf(t -> t == temp);
}
}
或者您可以使用迭代器从列表中移除
for (Iterator<Integer> it = range.iterator(); it.hasNext(); ) {
Integer obj= it.next();
if (obj == temp) {
// Remove the current element from the iterator and the list.
it.remove();
break;
}
}
你的逻辑还有问题
int temp = generator.nextInt(x-1);您生成的随机数不包含所有数字。它应该是 int temp = generator.nextInt(x+2);
remove
是一个重载方法,有 remove(int)
删除指定索引处的项目,还有 remove(T)
删除等于列表中的第一个对象您传入的参数
由于您将 int 传递给方法而不是 Integer,因此选择第一个方法
对代码最简单的修改是将 range.remove(temp);
替换为 range.remove(range.indexOf(temp));
或 range.remove((Integer)temp)
另外你必须调用generator.nextInt(x+1);
否则程序会陷入死循环
希望以下能满足您的要求。
Random random = new Random();
int x = 3;
List<Integer> range = new ArrayList<>();
for(int i = 0; i <x+1; i++) {
range.add(i);
}
List<Integer> list = new ArrayList<>();
while (!list.containsAll(range)) {
list.add(random.nextInt(x + 1));
}
System.out.println(list);