Я должен решить следующее упражнение:Почему это простое регулярное выражение/сканер не работает?
Создайте сканер клавиатуры, в котором токены являются целыми без знака, и напишите код, чтобы определить сумму целых чисел.
Примечание: -5 будет проверяться как целое число без знака 5, а знак минус будет пропущен в качестве разделителя
это мое решение (не работает):
import java.util.*;
public class testing{
public static void main(String[] argv){
testing p = new testing();
}
public testing(){
Scanner myScanner = new Scanner(System.in);
String regex = "\\s+|-";
myScanner.useDelimiter(regex);
int sum = 0;
while(myScanner.hasNextInt()){
int partial = myScanner.nextInt();
sum += partial;
}
System.out.println(sum);
}
}
Проблема с моим решением заключается в том, что он работает только для целых положительных чисел или отрицательного целого (только первого ввода), добавленного к положительным целым числам. , например:
-2
3
4
f (used to stop the program)
извлечет 9. но
3
-2
остановит программу и получить 3
Я пытаюсь понять причину такого поведения, но не повезло до сих пор ,
Поскольку вы строго работаете с числовыми значениями и выполняете числовые операции, вам может потребоваться использовать числовые функции, в первую очередь методы 'Math.abs()'. – npinti
@npinti, который будет работать, но упражнение требует «знак минуса будет пропущен как разделитель», поэтому я считаю, что метод «useDelimiter» должен использоваться для решения проблемы. – kawrlz
Я худею, чтобы ваше регулярное выражение было '' \\ s + | \ \ s * - "(или что говорит sheltem, это будет потреблять пробелы до - и не менее 1 символа, sheltem потребляет хотя бы один символ и любое количество пробелов и пробелов) – maraca