#java #input #user-input
#Ява #вход #пользовательский ввод
Вопрос:
Создайте новую очередь со строковым типом данных, в которую пользователь вводит элементы очереди.
Ограничения:
- Пользователь может вводить только буквы и цифры (A-Z, a-z и 0-9).
- Программа принимает только числа из входных данных (целое число)
- В любом случае, если будет введен хотя бы один специальный символ, программа вернет ошибку. (это включает в себя ПРОСТРАНСТВО)
Это требование к программе. И это то, что у меня есть до сих пор:
import java.util.Queue; import java.util.Scanner; import java.util.Iterator; public class Main { public static void main (String args[]){ Scanner scan = new Scanner(System.in); System.out.println("This is a Queue program. Please enter how many integer/s will be inputted."); int count = scan.nextInt(); scan.nextLine(); System.out.println("Enter the valid interger/s:"); String[] list = new String[count]; for (int i = 0; i lt; count; i ){ list[i] = scan.nextLine(); } Queuelt;Stringgt; newlist = new LinkedListlt;gt;(); for (String i:list){ newlist.add(i); } System.out.println(newlist); Iteratorlt;Stringgt; i=newlist.iterator(); while(i.hasNext()){ if(i.next().toString().matches("[^0-9] ")){ i.remove(); } } System.out.println(newlist); } }
Очевидно, что эта программа удаляет только символ без объединения с int. Я пытался использовать replaceAll("[^\d]", " ");
его, но я не знаю, как заставить его работать. Пожалуйста, помогите.
Комментарии:
1. Каков результат вашей программы?
2. Вывод должен быть массивом с нефильтрованными элементами, например
[hello123, 456, nice, hi789hey]
, и массивом, который затем фильтруется, чтобы принимать только int, например[123, 456, 789]
. Кроме того, программа должна отправлять сообщение об ошибке при вводе специального символа.
Ответ №1:
Разрешенные вами символы-это A-Z
, a-z
, и 0-9
. В регулярном выражении \w
соответствует этим символам. И \W
соответствует любому, кроме этих персонажей. Поэтому установите последний в качестве разделителя и посмотрите, как это работает.
Scanner scan = new Scanner(System.in); scan.useDelimiter("\W "); while (true) { System.out.println(scan.next()); }
Каждая возвращаемая группа символов scan.next()
должна содержать только допустимые символы.
Комментарии:
1. Хорошо, я попробую это сделать. Но, как только у меня будет разрешенный ввод, как мне удалить буквы, если они вводятся вместе с числом, например
123hello
, поскольку программа должна принимать значение int только для окончательного вывода массива.2. пробел по-прежнему будет разделителем и
scan.nextInt()
также будет работать. Поэтому я предположил, что, когда вы захотите,int
вы будете использоватьnextInt()
, а когда захотите, вы будете использовать строкуnext()
. В противном случае это может быть вам не полезно.3. Другой вариант-просто принимать строки в обычном режиме (без установленных разделителей). Затем для каждой строки вы можете использовать
match()
регулярное выражение, чтобы увидеть, являются ли это просто буквами или просто цифрами, и обрабатывать их по мере необходимости(e.g. for an int, Integer.parseInt()
, но это в значительной степени делает то же самое, что я предлагал ранее.4. Кстати, в вашем приглашении говорится, что это программа очереди. Пожалуйста, введите, сколько целых чисел/с будет введено? . Это что, ошибка? Ваши входные данные должны быть целыми числами.
5. Я попробовал сначала то, что вы предложили, но я не могу заставить это работать, как только я что-то ввожу, программа не останавливается, чтобы принимать больше входов. Что я делаю не так?