简体   繁体   English

使用用户输入搜索数组并打印具有此值的所有元素

[英]Searching an array with user input and printing all elements that have this value

I'm trying to search an array for a certain value and display all the elements which contain this value in java. For example, the user selects the number 5, there are 3 projects stored in the array with this value so all 3 of those will be printed out.我正在尝试在一个数组中搜索某个值,并在 java 中显示包含该值的所有元素。例如,用户选择数字 5,数组中存储了 3 个具有该值的项目,因此所有 3 个项目将被打印出来。 My code is compiling ok, but when I run it, it jumps to the else statement, even if I am inputting a number that is in the array.. Any help would be amazing.我的代码编译正常,但是当我运行它时,它会跳转到 else 语句,即使我输入的是数组中的数字。任何帮助都会很棒。 Here's my code:这是我的代码:

                case 3:
                //display all elements with the same state
                //get number user wishes to search for
                
                boolean found = false;
                 Scanner input = new Scanner(System.in);
                 System.out.print("Please enter the number you wish to search for");

                 //read user input
                 num = input.nextInt();

                 //traverse array
                 int k = 0;
                 for(k=0; k < myMonths.length; k++){
                     if(myMonths[index] == num){
                         found = true;
                         break;}
                     if(found){System.out.println(k);}

                     else{System.out.println("not found");}
                 }
                break;

Here's the array:这是数组:

            //Menu loop
            int myMonths[] = new int[5];
            int index = 0;
            int num;
            while(choice !=6){


                switch (choice){
                case 1:
                //int n = number of projects
                int n = 1;
                Scanner sc = new Scanner(System.in);
                System.out.println("How many months was your project?");


                for(int i=0; i<1; i++){
                    int a = sc.nextInt();

                    //if months is lesser than 2/greater than 12
                    if((a < 2) || (a > 12)){
                        System.out.println("Please enter an amount between 2 and 12 months");}

                   //if months is between 2 and 12 add it to the array

                    else{myMonths[index++] = a;} }
                break;

First, you should be using k instead of index .首先,您应该使用k而不是index Second, you shouldn't be printing "not found" (or testing for that) on every iteration.其次,您不应该在每次迭代时都打印“未找到”(或对此进行测试)。 You should limit variable scope as much as practical.您应该尽可能地限制变量 scope。 And you also mention wanting to find all matching indices so you shouldn't terminate the loop prematurely;你还提到想要找到所有匹配的索引,所以你不应该过早地终止循环; I think you wanted something like我想你想要类似的东西

//assume the value isn't present.
boolean found = false;
//read user input
int num = input.nextInt();

//traverse array
for(int k = 0; k < myMonths.length; k++) {
    if (myMonths[k] == num){
        found = true;
        System.out.println(k); // don't break or the loop ends early.
    }
}
//this test can only be done after you iterate **all** values.
if (!found) {
    System.out.println("not found");
}

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

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