2015-10-27 39 views
-3

程序从扫描仪读取值,直到给出值0,从而完成该过程。只有在给出的所有数字都是整数的情况下,程序才会编译总和。在所有其他情况下(不是所有的值都是整数),程序不会给出任何结果。 所以我注意到我的程序给出了整数的总和,即使有其他非整数值给出,有时当它们都是整数,因为它不显示真正的总和只是其中一个数字或什么。有谁能告诉我为什么我的程序无法正常工作吗?

import java.util.Scanner; 
public class Testing3{ 
    public static void main(String[] args) { 
     int sum1 = 0; 
     Scanner input = new Scanner(System.in); 
     System.out.println("Enter number"); 
     String number = input.nextLine(); 
     int value =Integer.parseInt(number); 
     while(true) { 
      if (value!=0) { 
       number = input.nextLine(); 
       if (Math.round(value)==value)//condition to integer{ 
        sum1 = sum1 + value; 
      } else { 
       System.out.println(sum1); 
       break; 
      } 
     } 
    } 
} 
+4

如果你想读*整数*?,你为什么要使用'nextDouble()'。为什么不'nextInt()'?.另外,我认为你应该使用'nextLine()'来读取输入,并尝试将该值解析为一个int,捕获异常并决定要做什么。 (或匹配模式,然后解析) – TheLostMind

+2

然后,如果您需要读取任何内容,但只显示所有值为整数的和,您可能需要将它们读作字符串('nextLine()'?)并检查如果他们是整数或不是。 – Kayaman

+0

因为用户应该有权在扫描器中写入任何数字..如果我只是把int和用户把小数点进程结束,我需要的过程只有当用户把一个0时结束。 –

回答

0

首先,使用while(true)for(;;)在无限循环

二使用nextInt()做,因为你有没有用双打来读取整数,而不是双打。或者,可以使用readLine读取字符串,并使用Integer.parseInt检查其有效性。

第三,你有一个语法错误(所以它不应该编译)。你有一个无与伦比的大括号附近。

最后,请删除if (number != 0),因为这会导致您的程序在循环中不断重复,而无需执行任何操作。改变循环内部为:

number = input.nextInt(); 
if (number != 0){ 
    sum1 = sum1 + number; //or use sum1 += number 
} else { 
    System.out.println(sum1); 
    break; 
} 
0

我认为你的问题是在你测试一个整数的地方。我不认为x mod 1 == 0在这里是正确的。当我被要求检查一个数字是否是一个整数时,我会做什么,我整理数字并检查它是否等于原始数字。

比方说,我们有一个double变量称为x和该计算结果为true如果x是一个整数:

Math.round(x) == x 

我不知道是否有更好的方式来做到这一点,但是这是我会怎样做到这一点,我喜欢它。

相关问题