Поиск по массиву имени с помощью цикла for - PullRequest
0 голосов
/ 31 октября 2019

Мне нужна помощь в разработке цикла for, который возвращает имя, если оно найдено, и, если оно не найдено, возвращает запрошенное имя как не найденное. Мне нужно сделать это, не повторяя не найденный цикл несколько раз.

Я пробовал различные операторы if, else if и else. Я также пробовал цикл do while внутри цикла for, а также пытался выполнить оператор not found вне цикла

    String[] values = new String[12];
    int name = 1;

    // Initialize Scanner
    java.util.Scanner input = new java.util.Scanner(System.in);

    // Create loop for name input 
    for (int i = 0; i < values.length; i++)
    {
        System.out.print("Enter in " + " the name of friend " + name++ + ": ");
        values[i] = new String(input.next());
        if (values[i].equalsIgnoreCase("zzzz")) 
    {
        break;
    }
    }

    // Create loop for name output
    System.out.println("\n" + "The names of your friends are: ");
    for (int i = 0; i < values.length; i++) 
    {
        if (values[i].equalsIgnoreCase("zzzz")) 
    {
        break;

    }
        else 
    {
        System.out.println(values[i]);
    }
    }

    // Search for the name
    boolean found = false;
    System.out.print("\n" + "Enter in the name of the friend you would like to find: ");
    String find = input.next();
    for(int i = 0;i < values.length && !found;++i) 
    {
        if (find.equalsIgnoreCase(values[i]))
        {
        System.out.println("\n" + "Your friend " + find + " was found");
        found = true;
        break;
        }
        else if (find != values[i] && (found = false))
        { 
        System.out.println("\n" + "Your friend " + find + " was not found" );
        break;
        }
    } 

    }
}   

Я ожидаю, что не найденный оператор не будет повторен несколько раз в циклепока фактическое имя не будет найдено. Если имя не существует в массиве, оно должно выполнить поиск по всему массиву и вернуть, что оно не было найдено.

Ответы [ 4 ]

0 голосов
/ 31 октября 2019

Смотрите мою попытку. Я преобразовал все элементы в нижний регистр, пока мы перебираем массив, чтобы не пропустить совпадение. Например, если бы мы искали «tom» и в массиве «Tom» совпадение было бы пропущено.

import java.util.Scanner;


public class Main {


    static Scanner input = new Scanner(System.in);

    public static void main(String[] args) {

        boolean foundFlag = false;
        String[] values = new String[12];

        //Populate array
        for(int i = 0, x = 1; i < values.length; i ++, x ++)
        {
            System.out.print("Enter name of friend " + x + ": " );
            String name = input.next();
            values[i] = name;
        }

        //Output all elements of the array
        System.out.println("\n" + "The names of your friends are: ");
        for(String x : values)
        {
            System.out.println(x);
        }

        //Find a friend
        System.out.print("\n" + "Enter in the name of the friend you would like to find: ");
        String find = input.next();


        //Iterate through array and check if Friend inside.
        for(int i = 0; i < values.length; i ++)
        {
            if(values[i].toLowerCase().equals(find.toLowerCase()))
            {
                foundFlag = true;
                break;
            }

        }

        //If friend in the array flag will be True, else flag will remain false.
        if (foundFlag)
        {
            System.out.println("Friend " + find + " found");
        }
        else
        {
            System.out.println("Friend " + find + " not found");
        }

    }
}
0 голосов
/ 31 октября 2019

Вы также можете использовать потоки Java 8:

boolean found = Stream.of(values)
    .anyMatch(value -> value.equalsIgnoreCase(name));
0 голосов
/ 31 октября 2019

попробуйте использовать этот код:

    // Search for the name
        boolean found = false;
        System.out.print("\n" + "Enter in the name of the friend you would like to find: ");
        String find = input.next();
        for(int i = 0;i < values.length && !found;++i) 
        {
            if (find.toLowerCase().equals(values[i].toLowerCase()))
            {
            System.out.println("\n" + "Your friend " + find + " was found");
            found = true;
            break;
            }

        } 
if(!found){

            System.out.println("\n" + "Your friend " + find + " was not found" );


}

        }
0 голосов
/ 31 октября 2019

просто создайте функцию для поиска:

public boolean findName(String[] items, String name) {
  if (items == null || items.length == 0 || name == null || name.trim().isEmpty()) return false;
  for(int i = 0; i < items.length; i++) {
    if (items[i].equalsIgnoreCase(name.trim())) {
      return true;
    }
  }

  return false;
}

Тогда, где вам нужно найти друга:

boolean exists = findName(values, "Foo Bar");
if (exists) {
  System.out.println("Friend exists");
} else {
  System.out.println("Friend does not exists");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...