【问题标题】:Is there any more elegant solution for this simple loop?这个简单的循环有没有更优雅的解决方案?
【发布时间】:2020-07-27 21:24:15
【问题描述】:

您好,我是编程新手,我正在尝试解决一个问题,其中我得到了一个由 10 个随机数组成的数组,我不得不说 number 是否在数组中。

如果是 - 那么程序必须显示消息“我找到了!”,如果不是 - “那个数字不在数组中!”

我写了这个解决方案,我想知道是否有更简单快捷的方法来解决它(Java语言)

输入:一个数字和一个数字数组

int cont=0;

for(i=0; i<10;i++){
  if(numbers[i]==number){
    System.out.println("I found it");
    cont++;
    break;
  }
}
if(cont==0)
  System.out.println("That number is not in the array!");

感谢您的帮助,如果真的很简单,对不起,但我是初学者。

【问题讨论】:

  • 它可以做得更好,例如,当您发现任何情况时直观地breaking for 循环(因为没有必要寻找更多)。
  • 你正在实现一个经典的搜索算法。如果未对随机数进行排序,则您的解决方案通常是最有效的(线性搜索),前提是您添加了 break,正如其他评论指出的那样。但是,如果对随机数进行了排序,则可以执行对数且效率更高的二进制搜索。下面是一个二分查找的例子:geeksforgeeks.org/binary-search.
  • 是的!我推荐的一些工具是streams。你可以用很少的代码做一些非常有趣的事情(比如这种搜索)。
  • 我认为最后一个条件应该是if (cont==0)。或者只是使用 boolean 而不是计数。
  • 找到号码后应该返回。那么你就不需要最后的 if 语句了。

标签: java arrays loops


【解决方案1】:

尝试这样(Java 8 及更高版本):

boolean contains = IntStream.of(numbers).anyMatch(x -> x == number); 
if(contains)
   System.out.println("I found it");
else
   System.out.println("That number is not in the array!");

【讨论】:

    【解决方案2】:

    在任何地方都使用 Streams,仅仅因为它们是 streams,这不是一个好主意,并且不会使代码更清晰,也不会总是使其更具可读性甚至更快。 p>

    您的循环看起来不错,我认为您无法提高这里的性能。我唯一要改变的是,我会引入 found 标志,它的代码会少一些。

    boolean found=false;
    
    for(i=0; i<10; i++) {
        if(numbers[i]==number) {
            System.out.println("I found it");
            found=true;
            break;
        }
    }
    if(!found)
        System.out.println("That number is not in the array!");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多