Разрешить ввод данных пользователем с одинаковыми переменными

-4

В настоящее время я использую метод charAt (0), чтобы позволить пользователям делать ввод. Это проблема, потому что у меня есть переменная, которая начинается с того же символа. Я хочу, чтобы программа прочитала первые 3 символа в этом случае. Другими словами, как я могу гарантировать, что моя программа распознает правильную переменную при выборе?

P. S- Я знаю, что мне нужно работать над соглашениями об именах, я все еще новичок в Java и учусь.

switch(SkillChoice.nextLine().toLowerCase().charAt(0)){
case 'd':
System.out.println("How many points towards Dexterity?");
System.out.println("Your current Dexterity is " + Attribute.Dexterity);

SkillChoice.nextDouble();

Attribute.setDex(SkillChoice.nextDouble() + Attribute.getDex());
System.out.println(Attribute.Dexterity);
case 's':
System.out.println("How many points towards Strength?");
System.out.println("Your current Strength is " + Attribute.Strength);

SkillChoice.nextDouble();

Attribute.setStr(SkillChoice.nextDouble() + Attribute.getStr());
System.out.println(Attribute.Strength);
case 's':
System.out.println("How many points towards Strength?");
System.out.println("Your current Strength is " + Attribute.Stamina);

SkillChoice.nextDouble();

Attribute.setSta(SkillChoice.nextDouble() + Attribute.getSta());
System.out.println(Attribute.Dexterity);
case 'i':
System.out.println("How many points towards Intelligence?");
System.out.println("Your current Intelligence is " + Attribute.Intelligence);

SkillChoice.nextDouble();

Attribute.setInt(SkillChoice.nextDouble() + Attribute.getInt());
System.out.println(Attribute.Intelligence);

При появлении запроса пользователь должен иметь возможность вводить "Str ****" или "Sta ****", где * - любая комбинация строк, и программа должна распознавать ее как желающую увеличить силу или выносливость.

спросил(а) 2019-02-01T23:48:00+03:00 1 год, 8 месяцев назад
0
81

Я думаю, что вы должны избавиться от всего кода switch/case и придерживаться if-предложений. Это потому, что с вещами, которые я объясняю ниже, это не будет работать с switch/case, если вы действительно хотите придерживаться этого, вы должны по крайней мере найти правильный синтаксис, потому что вы пропускаете любые разрывы

Таким образом, вы можете просто использовать метод startWith класса String (ссылка: https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#startsWith-java.lang.[CN10 ])

В вашем случае использование должно выглядеть примерно так:

if(SkillChoice.nextLine().toLowerCase().startsWith("str") {
System.out.println("How many points towards Strength?");
System.out.println("Your current Strength is " + Attribute.Strength);

SkillChoice.nextDouble();

Attribute.setStr(SkillChoice.nextDouble() + Attribute.getStr());
System.out.println(Attribute.Strength);
}
else if(SkillChoice.nextLine().toLowerCase().startsWith("sta") {
// Your stamina stuff here
}

Удачи и приветствия из Германии

PS: Я надеюсь (особенно), что Атрибут на самом деле не является именем класса (это будет указывать заглавная буква A), потому что это будет означать, что все ваши методы в этом классе являются статическими, потому что в других случаях вам нужен объект класса для их вызова. В любом случае, это плохо, и вы должны сосредоточиться на том, чтобы избавиться от этих ошибок, потому что они действительно делают код нечитаемым для вас и других по мере роста вашего проекта.

ответил(а) 2019-02-02T03:58:00+03:00 1 год, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема