为什么我的循环比我想要的少一次?

问题描述:

对于班级,我应该写一个数字扫描仪,可以打印用户输入的数字,以及这些数字的总和和乘积。我们可以假设用户在每个号码后输入空格,并且用户可以输入他们想要的数量。实施例: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); 
} 
+1

什么是'''数字'''? – Siddhartha

+1

你的错误输出是什么?你说什么呢少跑一次? –

+0

仅供参考:您不必使用'0'来初始化int,原始类型会自动将其初始化为默认值。 0是“int”类型的默认值。 –

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

我仍然对如何改变逻辑感到困惑,因为我仍然希望确保自己拿起被忽略的字符。 –