Java - Проверка, равна ли переменная любому из элементов массива - PullRequest
0 голосов
/ 27 апреля 2020

Я играю в викторины, в этом разделе я пытаюсь проверить, равна ли переменная 'a' любым элементам в массиве. В этом конкретном контексте я пытаюсь увидеть, равно ли оно 3 ИЛИ 1964. ПРИМЕЧАНИЕ. Я сократил код, чтобы избавиться от лишнего кода, и «// ...» означает, что я пропустил несколько строк код.

class Main {

publi c stati c void main (String [] args) {

Scanner input = new Scanner(System.in);
//...
int[] answer1 = {3, 1964}
//...
do {
  System.out.println("Enter your answer now.");
  int a = input.nextInt();
    if (a != answer1[]) {
      System.out.println("Incorrect. Try again.");
      guess_count++;
    } else {
      System.out.println("Correct! You gained 1 point!");
      pointTotal++;
      guessCount++;
    }

Ответы [ 4 ]

1 голос
/ 27 апреля 2020

Поскольку вы работаете с массивом примитивов, возможно, вы хотите работать с IntStream (однако, существует много способов, и это зависит от того, какие преимущества вы ищете.):

    int[] array = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    final int expectedInt = 10;
    boolean isExpectedIntPresent = Arrays.stream(array).filter(
            (element) -> element == expectedInt).findFirst().isPresent();
0 голосов
/ 27 апреля 2020

Вы можете использовать HashMap для хранения элементов (по которым вы хотите проверить свои догадки) в качестве ключей и использовать метод .containsKey (), чтобы проверить, содержит ли HashMap элемент или нет. Также не забудьте импортировать HashMap.

Scanner input = new Scanner(System.in);
//...
int[] answer1 = {3, 1964};
HashMap<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < answer1.length; i++){
    map.put(answer1[i], 1);
}
//...
do {
  System.out.println("Enter your answer now.");
  int a = input.nextInt();
    if (!map.containsKey(a)) {
      System.out.println("Incorrect. Try again.");
      guess_count++;
    } else {
      System.out.println("Correct! You gained 1 point!");
      pointTotal++;
      guessCount++;
    }
0 голосов
/ 27 апреля 2020

Уже есть пара ответов, предлагающих некоторый код, поэтому я отвечу с более «дидактической» точки зрения c.

Если вы хотите работать исключительно с массивами, существует несколько способов. для этого.

  • Если массив не отсортирован, наиболее интуитивно понятный подход - Линейный поиск . По сути, вы перебираете массив, сравниваете каждый элемент с вашей переменной и останавливаетесь / возвращаетесь, когда найдете его. Довольно просто и легко реализуемо.
  • Если массив отсортирован, Двоичный поиск - это вообще то, для чего вам нужно go. Этот подход использует преимущество того факта, что массив сортируется и в основном отбрасывает половину массива на каждой итерации. Я оставляю вас на усмотрение специфики.

В качестве альтернативы вы также можете использовать такие интерфейсы, как Lists или Streams , как правильно предложили другие.

Так или иначе, даже с помощью быстрого поиска в Google вы можете найти множество примеров такой проблемы (просто ищите алгоритмы поиска, и вы настроены на go).

0 голосов
/ 27 апреля 2020

Вы можете использовать contains из интерфейса List, например,

if(Arrays.aslist(answer1).contains(a)){
  // do stuff
}

Вы также можете изменить свой массив на список, тогда вам не нужно будет использовать Arrays.asList

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