代码之家  ›  专栏  ›  技术社区  ›  Sean Lim

使用for循环查找数组中的元素

  •  0
  • Sean Lim  · 技术社区  · 2 年前
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Grocer2 {
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            String[] names = new String[5];
            int count = 0;
            while(true){
                System.out.println("What is your name: ");
                // Store scanner input in name
                String name = scan.nextLine();
                // Add name into array
                names[count] = name;
                count++;
                if(count == 5){
                    break;
                }
            }
            System.out.println(Arrays.toString(names));
            while(true){
                System.out.println("Who are you looking for ? ");
                String contact = scan.nextLine();
                for(int i = 0; i < names.length; i++){
                    if(names[i].equals(contact)){
                        System.out.println("They are in aisle " + i);
                    }else{
                        System.out.println("Not here");
                    }
                }
                break;
            }
            scan.close();
        }
    }
    

    我想补充一点 Scanner 输入到数组中,我试图使用 for 环这个 对于 循环遍历所有元素,并在 names[i] 不等于 扫描仪 输入如何解决此问题?

    4 回复  |  直到 2 年前
        1
  •  0
  •   Abra BlueJK    2 年前
    while(true){
        System.out.println("Who are you looking for ? ");
        String contact = scan.nextLine();
        bool isFound = false;
        for(int i = 0; i < names.length; i++){
            if(names[i].equals(contact)){
                System.out.println("They are in aisle " + i);
                isFound = true;
                break;
            }
        }
        if(!isFound){
            System.out.println("Not here");
        }
        break;
    }
    
        2
  •  0
  •   Jason Barbour    2 年前

    如果你想让它在根本没有找到元素的情况下不在这里打印,你应该把它放在for循环之后。所以,如果你找到了名字,你可以循环整个数组,说你找到了,如果你没有找到,你可以在这里打印not,比如:

         while(true){
            System.out.println("Who are you looking for ? ");
            String contact = scan.nextLine();
           boolean isThere=false;
            for(int i = 0; i < names.length; i++){
                 if(names[i].equals(contact)){
                     System.out.println("They are in aisle " + i);
                     isThere = true;
                     break;// break only if you want the first time the String appeared 
                 }
             }
             if(!isThere){
              System.out.println("Not here");
             }
         break;
        }
    

    现在应该可以了,但是在这里,while循环没有任何作用。考虑移除它或用它做其他事情,因为当你做第一个循环时,你第一次直接打破它,所以就好像根本没有循环一样。

        3
  •  0
  •   ghost1034    2 年前

    可以创建一个名为 contactFound 并在找到匹配的名称时将其设置为true。当这种情况发生时,你可能还想打破这个循环。在for循环之外,打印 "Not here" 如果 contactFound 为false,如下所示。

    boolean contactFound = false;
    for (int i = 0; i < names.length; i++) {
        if (names[i].equals(contact)) {
            System.out.println("They are in aisle " + i);
            contactFound = true;
            break; // If you want the loop to stop when a matching name has been found
        }
    }
    if (!contactFound) System.out.println("Not here");
    
        4
  •  0
  •   Jhanzaib Humayun    2 年前

    你的第二个while循环从不循环。第一个循环可以使用do while循环。下面是代码的一个更简洁的版本:

        Scanner scan = new Scanner(System.in);
    
        String[] names = new String[5];
        int count = 0;
        do {
            System.out.println("What is your name: ");
            // Add name into array
            names[count] = scan.nextLine();
            count++;
        } while (count != 5);
    
        System.out.println(Arrays.toString(names));
    
        System.out.println("Who are you looking for ? ");
        String contact = scan.nextLine();
    
        int aisle = -1;
        for(int i = 0; i < names.length; i++){
            if(names[i].equals(contact)){aisle = i; break;}
        }
    
        if (aisle != -1) System.out.println("They are in aisle " + aisle);
        else System.out.println("Not here");
        scan.close();
    

    编辑:使用 ArrayList 而不是动态数组。这是一个使用 ArrayList s:

        Scanner scan = new Scanner(System.in);
    
        ArrayList<String> names = new ArrayList<>(5);
        for (int i = 0; i<5; i++){
            System.out.println("What is your name: ");
            names.add(scan.nextLine());
        }
        System.out.println(names);
    
        System.out.println("Who are you looking for ? ");
        String contact = scan.nextLine();
    
        if (names.contains(contact)) System.out.println("They are in aisle " + names.indexOf(contact));
        else System.out.println("Not here");
        scan.close();