#java
#java
Вопрос:
Я хочу, чтобы целое число было сохранено в массиве, а затем, как только пользователь введет 0, цикл while остановится и напечатает содержимое массива в строковом формате.
Я пробовал что-то с областью, но, честно говоря, я их не понимаю.
public static void apples() {
Scanner input = new Scanner(System.in);
System.out.println("Enter your integer: ");
int number = input.nextInt();
int[] array = {};
while(number != 0) {
if(number == 1){
System.out.println("0");
}
else if (number == 3) {
System.out.println("f");
}
else if (number == 5) {
System.out.println("-l");
}
else if (number == 7) {
System.out.println("V");
}
else if (number == 9) {
System.out.println("-/");
}
else if (number == 11) {
System.out.println("()");
}
else if (number == 13) {
System.out.println("()");
}
else if (number == 15) {
System.out.println("^");
}
else if (number == 17) {
System.out.println("E");
}
else if (number == 19) {
System.out.println("=");
}
else if (number == 21) {
System.out.println("x");
}
else if (number == 23) {
System.out.println("y");
}
System.out.println("int: " number);
}
};
Мои ожидаемые результаты были бы для ввода 135
и выходные данные будут 0f-l
Комментарии:
1. Где вы сохраняете число?
Ответ №1:
Взгляните на этот простой пример использования Map
и List
.
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
map.put(0, "");
map.put(1, "0");
map.put(3, "f");
map.put(5, "-1");
map.put(7, "V");
map.put(9, "-/");
map.put(11, "()");
map.put(13, "()");
map.put(15, "^");
map.put(17, "E");
map.put(19, "=");
map.put(21, "x");
map.put(23, "y");
List<Integer> listOfInputIntegers = new ArrayList<>();
Scanner input = new Scanner(System.in);
int integer;
do {
System.out.print("Input your next number:");
integer = input.nextInt();
listOfInputIntegers.add(integer);
} while (integer != 0);
for (int i : listOfInputIntegers) {
System.out.print(map.get(i));
}
System.out.println();
}
https://docs.oracle.com/javase/8/docs/api/java/util/Map.html
https://docs.oracle.com/javase/8/docs/api/java/util/List.html
Комментарии:
1. Это лучший способ. Это позволило бы вам легко проверять неверный ввод с помощью
if (!map.containsKey(i))
и сообщать об ошибке вместо того, чтобы выдавать исключение «такого ключа нет». Вы всегда должны проверять наличие неожиданных входных значений и обрабатывать их соответствующим образом.2. Согласен. Проверка исключений может быть реализована с его помощью различными способами, и одним из них было бы (!map.containsKey(целое число)). @Steve
3. Большое вам спасибо! Это имеет смысл, я ценю вашу помощь
4. Упс… да, я имел в виду «целое число», а не «i».
5. Еще одно небольшое предложение. Я думаю, что это очищает ваш код, чтобы определить ваши статические данные вне main () . Вы могли бы сделать это, объявив map выше main() как статическую переменную, а затем поместить добавление элементов в блок static {} . — хотя в том, как это сделал @ MS90, на самом деле нет ничего плохого.
Ответ №2:
Сохраняйте сопоставления целого числа со строкой в java.util.Сопоставьте, чтобы легко получить соответствующую строку после того, как пользователь введет int. Если введенное int
имеет соответствующую строку, добавьте ее в список строк, которые будут напечатаны в конце. Если у введенного int
нет соответствующей строки, тогда распечатайте ее и запросите next int
После того, как пользователь введет 0, остановите цикл, создайте строку из списка строк, накопленных до тех пор, пока пользователь не наберет 0, объединив все строки из списка
public class Test {
private static Map<Integer, String> integerToStringMappings = new HashMap<>();
static {
integerToStringMappings.put(1, "0");
integerToStringMappings.put(3, "f");
integerToStringMappings.put(5, "-l");
.... // and so on for all the integers mapped to strings
}
public static void main(String[] args) {
List<String> strings = new ArrayList<>();
Integer number = input.nextInt();
while(number != 0) {
System.out.println("Enter your integer: ");
number = input.nextInt();
String correspondingString = integerToStringMappings.get(number);
if ( correspondingString == null ) {
System.out.println("int: " number);
} else {
strings.add(correspondingString);
}
}
System.out.println(String.join("", strings));
}
}
Комментарии:
1. Ha! Я не видел этого, пока не сделал аналогичный комментарий к первому ответу. Итак, @ValentinCarnu демонстрирует мое предложение здесь.
2. Это также касается неправильного ввода. Браво!
Ответ №3:
Это может быть легко выполнено с помощью ArrayList, поскольку вы не знаете, насколько большим будет массив (если вы специально не спросите пользователя о количестве элементов, которые они будут вводить).
После сбора пользовательских номеров просто выполните цикл по каждому из них в ArrayList, чтобы создать соответствующий вывод, используя ваши операторы if-else. Я настоятельно рекомендую использовать оператор switch в этом случае.
ArrayList<Integer> values = new ArrayList<Integer>();
int number = input.nextInt();
while(number != 0) {
values.add(number);
number = input.nextInt();
}
for(int i=0; i<values.size(); i ) {
int numberCheck = values.get(i);
//Run through the if-else statements using numberCheck
System.out.println("int: " numberCheck);
}