Sean Lim
Sean Lim

Reputation: 19

Finding elements in array using for loop

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

I am trying to add Scanner inputs into an array and I am trying to search for the element in an array using a for loop. The for loop looped through all the elements and print out "Not here" when names[i] is not equal to the Scanner input. How do I fix this issue ?

Upvotes: 0

Views: 1347

Answers (5)

Ilkin Rustemov
Ilkin Rustemov

Reputation: 1

import java.util.Arrays;
import java.util.Scanner;

public class Grocer2 {
    public static void main(String[] args) {

        int count = 0;
        int size = 5;

        //you should check here
        boolean check = false;

        Scanner scan = new Scanner(System.in);
        String[] names = new String[size];

        for (int i = 0; i<size; i++) {

            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 == size) {
                break;
            }
        }

        System.out.println(Arrays.toString(names));
        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);
                check = true;
                break;
            }
        }
        if (!check) {
            System.out.println("Not here");
        }
        scan.close();
    }
}

Upvotes: 0

iraaa
iraaa

Reputation: 206

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

Upvotes: 1

Jhanzaib Humayun
Jhanzaib Humayun

Reputation: 1183

Your second while loop never loops. And you can use a do-while loop for the first loop. Here is a more compact version of the code:

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

Edit: Doing this is a lot easier with an ArrayList instead of dynamic arrays. Here is a version that uses ArrayLists:

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

Upvotes: 0

ghost1034
ghost1034

Reputation: 23

You can create a boolean called contactFound and set it to true when a matching name has been found. You may also want to break out of the loop when this happens. Outside of the for loop, print "Not here" if contactFound is false, as shown below.

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

Upvotes: 0

Jason Barbour
Jason Barbour

Reputation: 11

If you want it to print not here only when you have not found the element at all you should put it after the for loop. So you would loop through the whole array if you find the name say that you found it and then if you didn't u can print not here so something like that :

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

Now that should work but here the while loop doesn't do anything. Consider removing it or doing something else with it since when you are doing the first loop you are breaking directly the first time so it's as if there were no loop at all.

Upvotes: 0

Related Questions