Required java.lang.String[] found java.lang.String

155
04 декабря 2017, 16:41

Добрый день, столкнулся со следующей проблемой. Создал массив и инициализировал в нем элементы. Затем решил использовать массив в switch. Массив у меня типа String. В блоке switch возникает ошибка:

Required java.lang.String[] found java.lang.String

Подскажите пожалуйста, где я ошибся или что еще нужно сделать? И вообще, можно ли использовать String массив в switch?

 package com.company;

 import java.util.Scanner;
    public class Main {
    public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    Person Alex = new Person();
    Alex.Speak(" Alex");
    System.out.println("What kind of job I have to do today?");
    String kindofjob = s.nextLine();
    String[] joboffer = {
            "carry box",
            "eat smth",
            "say my name"
    };
    switch (joboffer) {
        case "carry box":
            Alex.Work(kindofjob);
            break;
    }
}

}

Answer 1

Вы не можете использовать массив как параметр switch. Если вы хотите пройти по всем элементам массива и обработать совпадения, используйте цикл и внутри него проверяйте. Например Ваш switch можно было бы заменить таким циклом

for(String str: joboffer){
    switch (str) {
            case "carry box":
                Alex.Work(kindofjob);
                break;
}
Answer 2

так нельзя писать. в свитч можно передать стринг, но не его массив. какую вы реакцию ожидаете на case "carry box"? да, один из элементов массива совпадает по содержанию со строкой, но не сам массив как объект. хотите искать элементы в массиве - придется гонять цикл. но лучше используйте HashSet, его метод contains очень быстро определит , есть ли в данной коллекции такая строка.

Set <String> set = new HashSet<>();
set.add("carry box");
set.add("eat smth");
set.add("say my name");
boolean contains = set.contains("carry box");

примерно так. в переменной boolean contains будет результат проверки на наличие элемента. мало того, создавая коллекцию типа Set, вы можете помимо HashSet выбрать LinkedHashSet, который сохранит тот порядок элементов, в котором вы их хаписываете, либо TreeSet, который автоматически отсортирует. К тому же в коллекциях еще много всяких плюшек по сравнению с массивами.

READ ALSO
Android контекстное меню

Android контекстное меню

Здравствуйте, вопрос по androidУ меня есть двухуровневый список и всплывающее контекстное меню, подскажите пожалуйста как мне добыть id группы...

126
Есть ли аналог datalist? (input с поиском плюс select)

Есть ли аналог datalist? (input с поиском плюс select)

Chosen и подобные не подходят, тк

195
Плагин jQuery для Select по типу datalist?

Плагин jQuery для Select по типу datalist?

Стандартные, такие как Chosen или Select2 не подходят, тк

169