Извините, но вы делаете все это неправильно.
Во-первых, вы объясните, что не так. Вы говорите, что хотите, чтобы «dayNum был равен значению строки», но затем в примере «dayNum should = 1» - где 1 не является «значением строки». Я понимаю, что вы имеете в виду, но объяснение неверно сформулировано. Хотя это не очень важно.
Важно то, что вы ожидаете определенного уровня метапрограммирования, которого нет у Java. А именно, вы хотите работать с именами локальных переменных. Программа должна читать значение локальной переменной int monday
, когда какая-либо другая локальная переменная имеет значение «понедельника». У Java этого нет. Вы могли бы сделать это с отражением, если int monday
было полем класса, а не локальной переменной, но здесь возникает другая проблема - вы делаете все это неправильно.
Существует множество способов реализовать это, но то, что вы, конечно же, не должны делать, это переменные, имена которых являются именами дней недели.
Один из способов сделать это, чтобы иметь массив строк, содержащее название дней (строчный):
String[] days = new String[] { 'sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday' }
Тогда можно обрезать и строчной ввод - curDay = console.next().trim().toLowerCase()
- а затем цикл по массиву, чтобы найти значение соответствия, а индекс, при котором значение соответствует был бы ответ:
int dayNum = -1;
for(int i=0; i<days.length; i++) {
if(days[i].equals(curDay) {
dayNum = i;
break;
}
}
Другим решением, которое было бы проще реализовать, быстрее работать, но, возможно, труднее понять, использовать карту (и самое трудное часть для понимания - это внутренности o е как реализации Карта работы - но вы абсолютно не нужно, чтобы это использовать их):
Map<String, Integer> daysOfWeek = new HashMap<String, Integer>();
daysOfWeek.put("sunday", 0);
...
daysOfWeek.put("saturday", 6);
String curDay = console.next().trim().toLowerCase();
int dayNum = daysOfWeek.get(curDay); // Will throw null-pointer exception if value of curDay is not in the map.
Также правильный способ сделать это было бы использовать Java API, для работы с датой - java.util.Calendar
(ну, а java.text.DateFormatSymbols
) - чтобы получить имена дней недели для определенного языкового стандарта. См. Этот ответ о том, как это сделать: In Java, how to get strings of days of week (Sun, Mon, ..., Sat) with system's default Locale (language)
Не могли бы вы показать, как вы объявляете дни целыми? Не комментируйте это, отредактируйте свой пост и включите его. – Arc676
Я понял. Я считаю, что это то, о чем вы просите. Благодарим вас за такой быстрый ответ –
Nudge: 'String.toLowerCase()' в нижний регистр (который у вас уже есть), а затем используйте ['switch'] (https://docs.oracle.com/javase /tutorial/java/nutsandbolts/switch.html). – yshavit