我正在编写一个程序,该程序会继续接受数字,直到用户输入-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);
}
}
答案 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;
}
}