无论我输入什么输入,方法CountQiftPositiv
都会返回0
。我在这里做错了什么?
import java.util.Scanner;
public class QiftPositivCount
{
public static void main(String [] args)
{
Scanner scan = new Scanner(System.in);
final int SENTINEL = -9999;
int x = 0;
int count = 0;
do
{
System.out.print("Type numbers (-9999 to end) : ");
x = scan.nextInt();
if(x == SENTINEL)
{
break;
}
count++;
}while (x != SENTINEL);
if(count == 0)
{
System.out.println("You didnt type any number");
}
else
{
System.out.println("There are " + count + " numbers typed , and the numbers that fulfill the conditon are "
+ CountQiftPositiv(x));
}
}
private static int CountQiftPositiv(int nr)
{
int poz = 0;
if(nr % 2 == 0 && nr % 3 == 0 && nr > 0)
{
poz++;
}
return poz;
}
}
答案 0 :(得分:1)
您在while循环之外使用CountQiftPositiv(x)
。
使用您拥有的代码,与调用CountQiftPositiv(-9999)
我建议你做一些事情:
do {
System.out.print("Type numbers (-9999 to end) : ");
x = scan.nextInt();
if(x == SENTINEL) {
break;
}
if (CountQiftPositiv(x) > 0) {
count++;
}
} while (x != SENTINEL);
我建议您重复修改循环,因为如果明智地使用break
,则不需要x = scan.nextInt();
。
答案 1 :(得分:1)
您已返回0
,因为上次输入为-9999
为负数,此条件if(nr % 2 == 0 && nr % 3 == 0 && nr > 0)
通常为false
。
尝试更改SENTINEL
nymber:
答案 2 :(得分:1)
[UITextView setAttributedString]
发送CountQiftPositiv(x)
,因为它的最后一个x值始终为>在-9999
x = -9999
- &gt; nr < 0
将保持为0
我已经制作了一个poz
变量来接受你的输入,如果输入不等于temp
变量,它会设置SENTINEL
因此删除x = temp
传递给-9999
的值。
此外,当您检查的数字是多个数字的因子时,您所要做的就是将这些数字相乘并检查该数字的模型。
对于CountQiftPositiv()
和2
,您只需检查3
。
6
答案 3 :(得分:1)
您的do
- while
循环抛出所有用户输入,但输入的最后一个整数(如果有)除外。由于退出该循环(不计算异常)的唯一方法是标记值-9999
,这是您将分配给x
的唯一值并传递给{{ 1}}。
CountQiftPositiv
只返回CountQiftPositiv
,如果正整数可被6整除。对于其他每个值,包括你的哨兵,它都会返回1
。
其他Sentinel问题
使用哨兵值几乎总是一个错误(除非你的作业特别指出)。迟早,那&#34;不可能&#34;输入实际上会显示出来。
由于您的目标是在用户完成之前继续循环(#34;是或否&#34;问题),请使用本地布尔变量,并测试 。此外,java.util.Scanner
有很多有用的方法可以解决这种情况,例如:
0
此循环实际上可以缩短为boolean done = false;
while (! done) {
if (scan.hasNextInt()) {
// Store scan.nextInt() for use later. See below.
} else {
// No more (valid) inputs.
done = true;
}
}
,但将循环的循环条件存储在变量中对于更复杂的退出决策非常方便。< / p>
存储用户输入
您永远不会存储多个用户输入。创建某种List
来存储它们,然后对该列表进行操作。
while (scan.hasNextint()) { ... }
后来,在&#34;未完成&#34;循环:
java.util.List<Integer> numbers = new java.util.LinkedList<Integer>();
计算用户输入
不需要if (scan.hasNextInt()) {
numbers.add(scan.nextInt());
} else {
done = true;
}
---您的整数集合将为您存储:
count
打印输出
最后,只有在满足奇怪条件时才输出每个数字。这假设您重写if (numbers.size() == 0) {
System.out.println("You didn't type any numbers!");
}
以返回CountQiftPositiv
(它几乎已经存在):
boolean
您可能希望重命名该方法,因为它不再算什么。
我把剩下的留给你了。
PS:在您学习时,将输入,处理和输出分成(至少)三种不同的方法尤其几乎总是一个好主意。理解一堆简短的方法比使用一个全部方法容易得多,并且使调试问题变得更容易
。