Ошибка class java.lang.Integer cannot be cast to class java.lang.String

Нужно, чтобы при вводе в консоль номера ячейки массива выходило соответствующее значение на экран, но появляется ошибка:

class java.lang.Integer cannot be cast to class java.lang.String (java.lang.Integer and java.lang.String are in module java.base of loader 'bootstrap')

Код:

public class Raduga {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    String[] colors = {"Red", "Orange", "Yellow", "Green", "Blu", "Dark blu", "Purple"};
    System.out.println("add number [0:6]");
    int num = in.nextInt();
    int key = Arrays.binarySearch(colors, num);
    String keyS = Integer.toString(key);
    System.out.println(keyS);
  }
}

Подскажите, пожалуйста, что я делаю неправильно.


Ответы (2 шт):

Автор решения: Алексей Шиманский

В доках нет метода с сигнатурой String[], int и даже Object[], int, есть как минимум

binarySearch(Object[] a, Object key)

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

Также перед подобного рода поиском надо отсортировать массив, иначе результат вызова метода будет не определен


Пример код

String[] colors = {"A", "B", "C", "D", "E", "F", "G"};
System.out.println(Arrays.binarySearch(colors, "D"));

Закономерно выведет: 3

→ Ссылка
Автор решения: Tamada

Как я понял, Вам надо по введенному номеру элемента получить соответствующее ему значение из массива:

Scanner in = new Scanner(System.in);
String[] colors = {"Red", "Orange", "Yellow", "Green", "Blu", "Dark blu", "Purple"};
System.out.println("add number [0:6]");
int num = in.nextInt();
System.out.println(colors[num]);
→ Ссылка