эффективный способ проверить, является ли группа букв в строке переменной?

#java #string #dictionary #variables #string-literals

#java #строка #словарь #переменные #строковые литералы

Вопрос:

Я пытаюсь написать код для печати музыкальных гамм. Я не могу использовать структуру типа списка или массива (школьные причины). вот что у меня есть на данный момент:

 public class Musicarum {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        double buildNum = 0.01;
        
        //**************************************************************************************
        int a = 1, bb = 2, b = 3, c = 4, db = 4, d = 5, eb = 6, e = 7, f = 8, gb = 9, ab = 10;
        //**************************************************************************************
  

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

 if(answer.equals("scales")) {
                System.out.println("Would you like to see a major or a minor scale?");
                String scale = input.nextLine();
                scale = scale.toLowerCase();
                if(scale.equals("major"));
                System.out.println("What Scale would you like to see?");
                scale = input.nextLine();
                System.out.println("The scale you would like to see is made of the notes: "   scale.charAt(0));
}}
  

моя текущая проблема находится в строке выше последней, где я печатаю масштаб. Мне интересно, можно ли проверить строку scale и посмотреть, соответствуют ли слова внутри переменной, которую я предопределил. затем я хочу иметь возможность использовать числовое значение, которое я присвоил переменной. Я пытался использовать значение unicode первого символа, введенного пользователем, но я не знаю, как использовать его для сопоставления с одной из моих переменных int. Я также изучил возможность настройки чего-то похожего на словарь python, но я совершенно не понимаю, как это сделать прямо сейчас. любая помощь? попытка сделать это без использования 4000 вложенных операторов if и 157 переменных для каждого масштаба.

Комментарии:

1. Спасибо за быстрое принятие. Но обратите внимание: пожалуйста, не возвращайтесь, чтобы затем изменить тему вопроса. Если у вас на пути возникла другая проблема, сначала проведите исследование, и если это не поможет, не стесняйтесь написать здесь еще один новый вопрос.

Ответ №1:

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

Прямой ответ на вашу проблему — использовать структуру Map (maps — это Java-эквивалент dicts в python). Краткий пример:

 Map<String, Integer> scaleByName = new HashMap<>();
scaleByName.put("a", 1); 
scaleByName.put("bb", 2); ...
  

Затем вы можете использовать такие вызовы, как scaleByName.get(someStringComingFromUserInput) сопоставление строкового ключа с его целочисленным значением. Существует множество javadoc, которые расскажут вам больше о том, как использовать карты.

Комментарии:

1. спасибо 00, ты святой. Я изучу карты и посмотрю, смогу ли я исправить эту проблему, и, вероятно, отредактирую свой пост, когда сделаю (или нет)