Вопрос массива Java - PullRequest
       2

Вопрос массива Java

2 голосов
/ 25 января 2011

Извините, глупый вопрос здесь, я его погуглил, но все, что я ищу, похоже, возвращает методы использования бинарного поиска и т. Д., Но мне нужно гораздо проще.

У меня есть массивязыки.Я создаю сканер, запрашиваю ввод.Попытка сделать так, чтобы, если язык, введенный пользователем, не был в массиве, он отображал ошибку и снова запрашивал.Должно быть просто, я только что нарисовал пробел.

Может кто-нибудь помочь, пожалуйста?Вот что у меня так далеко!

      Scanner scan = new Scanner(System.in);
      language = scan.next();
      while( language NOT IN ARRAY languages) {
       System.out.print("error!");
       language = scan.next();
     }

Ответы [ 4 ]

4 голосов
/ 25 января 2011

Теперь я понимаю ваш вопрос лучше. Вы должны обязательно использовать Set. Но вы захотите использовать contains() метод набора, чтобы проверить, существует ли язык.

Scanner scan = new Scanner(System.in);
language = scan.next();
while(!set.contains(language)) {
    System.out.print("error!");
    language = scan.next();
}

Старый ответ, но актуальная информация:
То, что вы хотите использовать, это Set тип коллекции. Набор не позволяет дублировать записи. Из Javadocs:

Коллекция, в которой нет повторяющихся элементов.

Set<String> set = new HashSet<String>();
// will not add another entry if set contains language already
set.add(language);

Кроме того, если вы хотите узнать, было ли значение отклонено или нет, вы можете использовать тип возврата метода add (). Возвращает true, если элемент не существовал, и false в противном случае.

1 голос
/ 25 января 2011

Вы можете сделать это, если вам действительно нужно использовать массив:

   Arrays.sort(languages);
   Scanner scan = new Scanner(System.in);
   language = scan.next();
   while( Arrays.binarySearch(languages, language) < 0) {
    System.out.print("error!");
    language = scan.next();
   }
1 голос
/ 25 января 2011

Вы можете сделать что-то вроде:

public static boolean contains(String language, String[] lang_array) {
    for (int i = 0; i < lang_array.length; i++) {
        if (lang_array[i].equals(language))
            return true;
    }

    return false;
}

public static void main(String[] args) {
    String[] lang_array = {"Java", "Python", "Ruby"};
    Scanner scan = new Scanner(System.in);
    String language = scan.next();
    while(!contains(language, lang_array)) {
        System.out.print("error!");
        language = scan.next();
    }
}
0 голосов
/ 25 января 2011

Вы можете сделать две вещи:

Либо выполнить итерацию по массиву, и сравнить содержимое каждого элемента с тем, что вы пытаетесь увидеть, присутствует ли он каждый раз при добавлении языка.

ИЛИ

Используйте LinkedList или какой-либо другой тип структуры Java, который имеет метод .contains(), это будет, в некотором смысле, похоже на то, что я упоминал для массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...