import java.util.ArrayList;
import java.util.Scanner;
import java.util.Collections;
public class JMUnit2Ch10
{
public static void main(String[] args)
{
ArrayList<Integer> randomNumbers = new ArrayList<>();
System.out.print("How many random numbers between 1 and 100:");
Scanner stdIn = new Scanner(System.in);
int numOfNumbers = stdIn.nextInt();
for(int i=0; i<numOfNumbers; i++)
{
randomNumbers.add((int)(Math.random()*100)+1);
}
System.out.print("Which random number are your searching for?:");
int searchNumber = stdIn.nextInt();
System.out.printf("%n");
for(int a: randomNumbers)
{
System.out.println("Unsorted List");
System.out.println(searchNumber + " found at location: "+ randomNumbers.indexOf(searchNumber));
}
Collections.sort(randomNumbers);
for(int b:randomNumbers)
{
System.out.println("Sorted List");
System.out.println(searchNumber + " found at location: "+ randomNumbers.indexOf(searchNumber));
}
System.out.println(randomNumbers.stream().mapToInt(value -> value).sum());
}
}
我尝试使用 boolean 值仅在找到时显示我使用的代码是:
boolean found = false;
然后在我输入的两个打印语句中:
found=true;
在底部放:
if(!found)
{
System.out.println(randomNumbers.stream().mapToInt(value -> value).sum());
}
并且仍在获取 for each 循环的每次迭代的输出。我想要做的是在 ArrayList
中每次都获得一个输出,该数字同时出现在已排序和未排序的 ArrayList
中,然后是所有数字的总和数组列表。
Edit1:我得到的当前输出是 searchNumber
,其中有多少个数字,因此它输出 x
时间量,其中 x
是 numOfNumers
。我希望它只输出它在两个数组中出现的次数。
编辑 2:
由于建议我不要使用图片,因此我希望它显示:
1到100之间的随机数有多少:1000
您要搜索哪个随机数?:5
未排序列表 在以下位置找到 5 个:502 在以下位置找到 5 个:725 在以下位置找到 5 个:856 在以下位置找到 5 个:924
排序列表 在以下位置找到 5 个:40 在以下位置找到 5 个:41 在以下位置找到 5 个:42 在以下位置找到 5 个:43
所有数字的总数:49089
我得到的是 未排序列表 在位置 502 X1000 找到 5 个 排序列表 5 在位置 41 X1000 找到
所有数字的总和:42013
最佳答案
您需要添加一个条件来检查当前数字(a 或 b)是否等于 searchNumber
.但是,当发现事件时,您现在尝试打印 randomNumbers.indexOf(searchNumber)
.这将为每次出现返回相同的数字,即第一次出现的索引。唯一的方法是使用 for (int i = 0; i < randomNumbers.size(); i++)
循环或使用计数器。
此外,我会将“未排序列表”和“已排序列表”放在循环上方,以便这些行只打印一次。
如果您使用 for (int i = 0; i < randomNumbers.size(); i++)
,您的代码将如下所示:
System.out.println("Unsorted List");
for (int i = 0; i < randomNumbers.size(); i++) {
if (randomNumbers.get(i) == searchNumber) {
System.out.println(searchNumber + " found at location: " + i);
}
}
Collections.sort(randomNumbers);
System.out.println("Sorted List");
for (int i = 0; i < randomNumbers.size(); i++) {
if (randomNumbers.get(i) == searchNumber) {
System.out.println(searchNumber + " found at location: " + i);
}
}
或者如果你想使用计数器:
int loc = 0;
System.out.println("Unsorted List");
for(int a : randomNumbers) {
if (searchNumber == a) {
System.out.println(searchNumber + " found at location: "+ loc);
}
loc++;
}
Collections.sort(randomNumbers);
loc = 0;
System.out.println("Sorted List");
for(int b : randomNumbers) {
if (searchNumber == b) {
System.out.println(searchNumber + " found at location: " + loc);
}
loc++;
}
关于java - 如何停止打印所有迭代并仅显示真实迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45805872/