简体   繁体   English

使用 for 循环查找在随机、未排序数组中多次出现的元素

[英]Using for loop to find an element that appears multiple times in a random, unsorted array

My goal is to print out a user input value (and its corresponding index) if it appears 1 or more times in a random generated array of 50 integers.我的目标是打印出用户输入值(及其相应的索引),如果它在随机生成的 50 个整数数组中出现 1 次或多次。 If I search the array for a value, and it happens to appear more than once, however, only one location of the element is printed, and then the if-else statement is executed.但是,如果我在数组中搜索一个值,并且它碰巧出现多次,则只打印元素的一个位置,然后执行 if-else 语句。 If I remove the break at the end of the third for loop, the whole thing falls apart.如果我在第三个 for 循环结束时删除 break,整个事情就会崩溃。 I've attached an image but here is the part of it that is giving me an issue.我附上了一张图片,但这是给我一个问题的部分。 Apologies if the code is not clean, I'm very new.如果代码不干净,我很抱歉,我很新。

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 for循环中的if语句

Implementing the comments to your question:对您的问题实施评论:

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);
    }
}

Of-course there is no need to search for the smallest number because it will be the first element in the sorted array.当然没有必要搜索最小的数字,因为它将是排序数组中的第一个元素。 Hence I removed that part of your code.因此,我删除了您的那部分代码。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM