当前位置: 首页 > 知识库问答 >
问题:

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

东方骏
2023-03-14
import html" target="_blank">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 found = false;

然后在两个打印语句中,我输入:

found=true; 

并在底部放置:

if(!found)
{
    System.out.println(randomNumbers.stream().mapToInt(value -> value).sum());
}

并且仍然在为每个循环的每一次迭代获取输出。我试图做的是在ArrayList中的每一次获得一个输出,该数字出现在已排序和未排序的ArrayList中,然后是数组列表中所有数字的总和。

编辑1:我得到的当前输出是searchNumber,它表示有多少个数字,因此它输出的是 time的数量,其中 x是numOfNumbers。我希望它只输出它在两个数组中出现的次数。编辑2:由于建议我不要使用图片,我希望它显示:1到100之间有多少个随机数:1000您要搜索哪个随机数?:5.

未排序的列表5在位置:502找到5在位置:725找到5在位置:856找到5在位置:924找到

排序列表 5 在位置找到: 40 在位置找到 5 在位置找到: 41 在位置找到 5 在位置找到: 42 5 在位置找到: 43

所有号码的总数:49089

我得到的是未排序列表 5 在位置 502 X1000 找到 排序列表 5 在位置 41 X1000 找到

所有数字的总和:42013

共有3个答案

梅耘豪
2023-03-14
匿名用户

我想你的问题就在这里:

int searchNumber = stdIn.nextInt();
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));  
}

您正在searchNumber中读取一个数字,但从未使用它与randomNumbers中的数字进行比较,您正在打印数组中的每个数字。

因此,在两个 for-each 循环中,您可以:

if (searchNumber == a) {
    System.out.println(searchNumber + " found at location: "+ randomNumbers.indexOf(a));
}

< code>b变量也是如此。

我还将放置:System.out。println(“未分类列表”)循环之前。。。

因此,它应该看起来像:

System.out.println("Unsorted List");
for (int a : randomNumbers) {
    if (searchNumber == a) {
        System.out.println(searchNumber + " found at location: "+ randomNumbers.indexOf(a));
    }
}

Collections.sort(randomNumbers);
System.out.println("Sorted List");
for (int b : randomNumbers) {
    if (searchNumber == b) {
        System.out.println(searchNumber + " found at location: "+ randomNumbers.indexOf(b));
    }
}

感谢@ChrisWitteveen指出这一点:

这里的一个问题是随机数索引的(a)和随机数索引的(b)总是返回相同的数字。

在这种情况下,您可以使用一个简单的for循环来简化代码,而不是为每个one使用

将上述建议改为:

System.out.println("Unsorted List");
randomNumbers = new ArrayList<>(randomNumbers);
for (int i = 0; i < randomNumbers.size(); i++) {
    if (searchNumber == randomNumbers.get(i)) {
        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 (searchNumber == randomNumbers.get(i)) {
        System.out.println(searchNumber + " found at location: " + i);
    }
}

例如,为了测试目的,我尝试将随机生成从1-100更改为1-10,然后得到以下输出,我还打印了整个数字列表,仅用于调试目的:

How many random numbers between 1 and 100:20
2
9
2
6
10
5
6
6
7
6
9
9
3
7
9
5
10
3
6
8
Which random number are your searching for?:2

Unsorted List
2 found at location: 0
2 found at location: 2
Sorted List
2 found at location: 0
2 found at location: 1
128

高英彦
2023-03-14

我要做的是在ArrayList中的每一次都获得一个输出,该数字出现在已排序和未排序的ArrayList中,然后是数组列表中所有数字的总和。

只需添加 if 条件,如下所示:

for(int a: randomNumbers)
{
    System.out.println("Unsorted List");
    if(a == searchNumber)
    {
        System.out.println(searchNumber + 
            " found at location: "+ randomNumbers.indexOf(searchNumber));

    }
}
吕岳
2023-03-14

您需要添加一个条件来检查当前数字(a或b)是否等于search chNumber。但是,当找到一个事件时,您现在尝试打印randomNumbers.indexOf(search chNumber)。这将为每个事件返回相同的数字,即第一个事件的索引。唯一的方法是使用for(int i=0; i

此外,我会将“未排序列表”和“排序列表”放在循环上方,以便这些行仅打印一次。

如果使用for(int i=0;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++;
    }

 类似资料:
  • 我有一个返回: 然后另一个用户这样使用它: 如何处理任何迭代中的失败情况? 我知道我可以使用,在这种情况下,错误结果将被忽略: 的迭代器根据成功状态具有0或1项,如果为0,将过滤掉它。 但是,我不想忽略错误,而是想让整个代码块停止并返回一个新错误(基于映射中出现的错误,或者只是转发现有错误)。 在Rust中如何最好地处理此问题?

  • 问题内容: 我将通过jsoup连接到一个url并获取它的所有内容,但问题是,如果我选择喜欢, 它返回一个元素,但是我想获取页面中的所有元素,例如,一个一个地迭代它们, 如果我选择使用body,我会在一行中得到结果,例如, 相反,我想选择所有元素并逐个迭代并产生如下结果: 使用jsoup可以吗? 谢谢, 卡尔提克 问题答案: 您可以使用选择器选择文档的所有元素,然后使用分别获取每个元素的文本。

  • 问题内容: 如果我创建两个列表并将其压缩 然后我将z输入到两个列表中 那么,l1的内容就很好了[(1,7),(2,8),(3,9)],但是l2的内容只是[]。 我猜想这是python关于可迭代项的一般行为。但是,作为从C家族迁移的新手程序员,这对我来说没有意义。为什么会这样表现?有办法解决这个问题吗? 我的意思是,是的,在这个特定示例中,我可以将l1复制到l2中,但是总的来说,在迭代一次之后,是否

  • 问题内容: 我有一个像这样的ArrayList对象: 如何遍历列表?我想在TextView中显示值,该值来自ArrayList对象的数据。 问题答案: 最简单的方法是遍历的所有s ,然后遍历的所有键:

  • 类似于同步 方式的Iterator,这里有很多不同的方法可以迭代和处理一个Stream中的值。有组合器样式的方法,例如map,filter和fold和他们的有错误就早退的表弟try_map,try_filter和try_fold。 不幸,for循环不适用于Streams,但对于命令式代码,while let和next/try_next函数可以这样用: async fn sum_with_next(

  • 在我的应用程序中,我需要数组1的给定大小k的所有子集。。n 这可以使用递归方法轻松完成,并存储沿途找到的所有子集。然而,我不希望我的应用程序使用指数级的内存量[O(n^k)]。 因此,我想编写一个实现(Java)的类来迭代所述子集。 所以我可以如下使用它: 显然,我们需要存储最后返回的当前子集,它被初始化为1... k。但是如何从这个当前子集计算下一个子集呢?