java - 如何停止打印所有迭代并仅显示真实迭代

标签 java loops arraylist foreach iteration

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/

相关文章:

java多服务器聊天架构

java - UTC 或时区时间戳的 SQL 标准

java - 如何在java中有效地使用方法中的参数?

c++ - 如何在不使用 break 的情况下退出 C++ 中的循环?

java - ArrayList 对 String、int 进行排序

java - 更新 Activity 不起作用......

java - Selenium Java - 不使用 .click() 标记复选框已选中

loops - lisp 错误处理 - 检查变量是否为 nil

java - 如何制作通用比较器方法

java - 从单个方法返回 ArrayList 和 int 值。是否可以?