【问题标题】:Using for loop to find an element that appears multiple times in a random, unsorted array使用 for 循环查找在随机、未排序数组中多次出现的元素
【发布时间】:2020-07-28 06:19:43
【问题描述】:

我的目标是打印出用户输入值(及其对应的索引),如果它在随机生成的 50 个整数数组中出现 1 次或多次。但是,如果我在数组中搜索一个值,并且它恰好出现不止一次,则只打印元素的一个位置,然后执行 if-else 语句。如果我在第三个 for 循环结束时删除 break,整个事情就会崩溃。我附上了一张图片,但这是给我一个问题的部分。如果代码不干净,我很新。

public static void main(String[] args) {

    System.out.println("IDS201 HW3:\n");
    System.out.println("1. Generate 50 random integer unsorted list.\n");
    
    Scanner stdin = new Scanner(System.in);
    
    int[] randomNumbers = new int[50];
    for(int index = 0; index < randomNumbers.length; index++) {
        randomNumbers[index] = (int) (Math.random()*100);
    }//end for

    int count = 0;
    for(int i = 0; i < randomNumbers.length; i++) {
        System.out.print(randomNumbers[i] + ",");
        count++;
        if(count == 10) {
            System.out.println();
            count = 0;
            }
        }//end for
    
    System.out.println("\nSearch value?");
    int x = stdin.nextInt();
    int i;
    for(i = 0; i < randomNumbers.length; i++) {
        if(randomNumbers[i] == x) 
            break;}
            
    if (i != randomNumbers.length) {
        System.out.println("\nFound " + x + " in array [" + i + "]");}
    else {
        System.out.println(x + " is not in the list");}
    
    {int temp;
    int size = randomNumbers.length;

    for(i = 0; i<size; i++ ){
       for(int j = i+1; j<size; j++){
          if(randomNumbers[i]>randomNumbers[j]){
             temp = randomNumbers[i];
             randomNumbers[i] = randomNumbers[j];
             randomNumbers[j] = temp;
          }
       }
    }
    System.out.println("\nSmallest element of the array is: " + randomNumbers[0]);}
    System.out.println("\n3. Sort the list:");
     int size = randomNumbers.length;
     for(i=0; i<size; i++)  
       {  
           for(int j=i+1; j<size; j++)  
           {  
               if(randomNumbers[i] > randomNumbers[j])  
               {  
                   int temp = randomNumbers[i];  
                   randomNumbers[i] = randomNumbers[j];  
                   randomNumbers[j] = temp;  
               }  
           }  
       }  

     System.out.print("Now the Array after Sorting is :\n\n"); 
       int count1 = 0;
       for(i=0; i<size; i++)  
       {  
           System.out.print(randomNumbers[i]+ ",");
           count++;
           if(count == 10) {
               System.out.println();
               count = 0;
         }
     }  
}       

}

if statement in for loop

【问题讨论】:

  • 如果你想找到所提供值的所有索引,那么不要跳出循环——将所有索引存储在一个新数组中(更好的是,List 实现)。不相关:选择一种花括号样式并只使用那个,Java != JavaScript,并考虑将每个功能块分解为一个单独的方法。我发现代码难以阅读和推理,而且看起来应该很简洁。
  • 提取函数和编写单元测试的最佳时机

标签: java arrays for-loop if-statement


【解决方案1】:

针对您的问题实施 cmets:

import java.util.Scanner;

public class NumCount {
    private static final int  RANDOM_NUMBER_COUNT = 50;

    private static void display(int[] randomNumbers) {
        int count = 0;
        for (int i = 0; i < RANDOM_NUMBER_COUNT; i++) {
            System.out.print(randomNumbers[i] + ",");
            count++;
            if (count == 10) {
                System.out.println();
                count = 0;
            }
        }
    }

    private static int[] generateRandomNUmbers() {
        int[] randomNumbers = new int[RANDOM_NUMBER_COUNT];
        for (int index = 0; index < RANDOM_NUMBER_COUNT; index++) {
            randomNumbers[index] = (int) (Math.random() * 100);
        }
        display(randomNumbers);
        return randomNumbers;
    }

    private static int search(int[] randomNumbers, int x) {
        int i;
        int count = 0;
        for (i = 0; i < randomNumbers.length; i++) {
            if (randomNumbers[i] == x) {
                System.out.println("\nFound " + x + " in array [" + i + "]");
                count++;
            }
        }
        return count;
    }

    private static int[] sort(int[] randomNumbers) {
        int size = randomNumbers.length;
        for (int i = 0; i < size; i++) {
            for (int j = i + 1; j < size; j++) {
                if (randomNumbers[i] > randomNumbers[j]) {
                    int temp = randomNumbers[i];
                    randomNumbers[i] = randomNumbers[j];
                    randomNumbers[j] = temp;
                }
            }
        }
        return randomNumbers;
    }

    /**
     * Start here.
     */
    public static void main(String[] args) {
        System.out.println("IDS201 HW3:\n");
        System.out.println("1. Generate " + RANDOM_NUMBER_COUNT + " random integer unsorted list.\n");
        int[] randomNumbers = generateRandomNUmbers();
        System.out.print("\n2. Search value? ");
        Scanner stdin = new Scanner(System.in);
        int x = stdin.nextInt();
        int count = search(randomNumbers, x);
        if (count == 0) {
            System.out.println(x + " is not in the list");
        }
        System.out.println("\n3. Sort the list:");
        sort(randomNumbers);
        System.out.print("Now the Array after Sorting is :\n\n");
        display(randomNumbers);
    }
}

当然没有必要搜索最小的数字,因为它将是排序数组中的第一个元素。因此我删除了你的那部分代码。

【讨论】:

  • 谢谢@Abra 再问一个问题,如果可以的话。我如何能够显示在顺序搜索中进行的比较次数以获得答案?
  • @stefmarie93 你指的是什么“答案”?您的意思是为了对数组进行排序,执行了多少次比较?还是您的意思是在搜索过程中进行了多少次比较?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-27
  • 2016-10-24
  • 2010-12-27
相关资源
最近更新 更多