为什么我的循环比我想要的少一次?
问题描述:
对于班级,我应该写一个数字扫描仪,可以打印用户输入的数字,以及这些数字的总和和乘积。我们可以假设用户在每个号码后输入空格,并且用户可以输入他们想要的数量。实施例:3个10 2 你的数目如下:3 10 2 萨姆:15 产品:60为什么我的循环比我想要的少一次?
public static void substringGrabber() {
String recentInt;
int lastDigit = 0;
int parsedInt = 0;
for (int i = 0; i < numbers.length(); i++) {
if (! Character.isDigit(numbers.charAt(i))) {
char ignoredCharacter = numbers.charAt(i);
if (ignoredCharacter != ' ') {
System.out.println("Your input of:" + ignoredCharacter + " has been ignored");
}
recentInt = numbers.substring(lastDigit, i);
parsedInt = Integer.parseInt(recentInt);
sum += parsedInt;
product *= parsedInt;
lastDigit = i + 1;
finalString = finalString + parsedInt + " ";
}
}
System.out.println("Your numbers are: " + finalString);
System.out.println("Sum: " + sum);
System.out.println("Product: " + product);
}
答
nextInt()
它默认驻留在Scanner
使用空白作为令牌隔板。因此,你的代码可以是这样的(请他们事先他们会多少号码输入):
System.out.println("How many numbers?");
int numbers = scanner.nextInt();
int sum = 0;
int product = 0;
int[] arr = new arr[numbers];
for (int i = 0; i < numbers; i++){
System.out.println("Type in a number");
int input = scanner.nextInt();
sum += input;
arr[i] = input;
product *= input;
}
System.out.println("Your numbers are: " + Arrays.deepToString(arr));
System.out.println("Sum: " + sum);
System.out.println("Product: " + product);
答
如果您在您的测试字符串的结尾,将工作添加一个空格。
检查!Character.isDigit(numbers.charAt(i))忽略最后一位数字。
所以改变逻辑来解释这种情况:你有一个数字,你在你的字符串的末尾。
+0
我仍然对如何改变逻辑感到困惑,因为我仍然希望确保自己拿起被忽略的字符。 –
什么是'''数字'''? – Siddhartha
你的错误输出是什么?你说什么呢少跑一次? –
仅供参考:您不必使用'0'来初始化int,原始类型会自动将其初始化为默认值。 0是“int”类型的默认值。 –