计数输出不正确

时间:2014-11-18 12:34:07

标签: java input output

我正在编写一个程序,该程序会继续接受数字,直到用户输入-1。然后它会显示可被9整除的项目数;使用特殊属性 - 可被9整除的数字的数字之和,它们本身可被9整除。我被告知依赖于模块化方法。输入简单,没有数组。

没有编译错误和东西,但count的值总是错误的。例如,如果我输入 18,18,4,4,2,5,19,36,-1 ,预期输出 3 ,但输出结果出来我不知道为什么。我试过计算++和++计数,它们产生相同的输出。我哪里错了?

import java.util.Scanner;
public class Div{
static Scanner sc = new Scanner(System.in); boolean run = true; static int n = 0; 
static int count = 0;
public static void main(String[] args){

    Div a = new Div();
    a.accept();
    a.display();

}
void accept(){
    while (run){
        System.out.println("Enter the number");
        n = sc.nextInt();
        if (isDivisibleByNine(n)){
            count = count + 1;
        }
        if (n == -1){
            run = false;
        }
    }
 }
 static int sumOfDigits(int a){
    int m = a; int sum = 0;
    while (m>0){
        sum = sum + (m%10); m /= 10;
    }
    return sum;
 }
static boolean isDivisibleByNine(int x){
    if (sumOfDigits(x)%9==0){
        return true;
    }
    else {
        return false;
    }

}
void display(){
    System.out.println("The total number of numbers that are divisible are: " + count);
}
}

4 个答案:

答案 0 :(得分:2)

问题在于您的结束值为-1。对于-1,sumOfDigits函数也将返回0.因此,只有count总是递增1。

while (run){
    System.out.println("Enter the number");
    n = sc.nextInt();
    if (n == -1){
        break; //Break if the end of input reached.
    }
    if (isDivisibleByNine(n)){
        count = count + 1;
    }

}

答案 1 :(得分:1)

你的程序认为可以被9整除的最终数字是你的-1。

你经历完整的循环 - 你的总和只在数字大于0时才会出现,所以它会立即终止并返回0. 0 % 9为0,所以它递增你的计数器然后结束。通过更改循环来检查:

    if (n == -1){
        run = false;
    }
   else if (isDivisibleByNine(n)){
        count = count + 1;
    }

答案 2 :(得分:0)

您没有计算数字之和。

这是你计算它的方式:

 static int sumOfDigits(int a){
    int m = a; int sum = 0;
    while (m>0){
        sum = sum + (m%10);
        m /= 10;
    }
    return sum;
 }

编辑(修复sumOfDigits后):

您得到错误的计数,因为您还检查-1是否可被9整除,并返回true,因为sumOfDigits无法正确处理负整数。

这是一个简单的解决方法:

void accept(){
    while (run){
        System.out.println("Enter the number");
        n = sc.nextInt();
        if (n == -1){
            run = false;
        }
        else if (isDivisibleByNine(n)){
            count = count + 1;
        }
    }
 }

答案 3 :(得分:0)

这样改变。

static boolean isDivisibleByNine(int x){
if(x>0){
if (sumOfDigits(x)%9==0){
    return true;
}
else {
    return false;
}
}else{
    return false;
}
}