我必须编写一个程序,该程序返回读取的正数之和,并将读取用户的输入,直到输入为零。
到目前为止,我没有计算输入的正数之和,我需要一些帮助。
这是我到目前为止所做的:
readAndSumPositives()
(注意您已获得扫描仪,请勿使用System.in) -
从用户读取直到给定0并返回读取的正数之和。
示例:
♦用户输入:0 =>返回0
♦用户输入1 2 3 0 =>返回6(1 + 2 + 3)
♦用户输入1 -2 3 0 =>返回6(1 + 3,跳过-2,因为它是负数)
public static int readAndSumPositives(Scanner in,PrintStream out)
{
int input;
int count;
int sum;
int total;
sum = 0;
count =0;
total = sum+count;
out.println("Please enter a number");
input=in.nextInt();
while(input != 0 && input != -2 && input != -3 && input != -4) {
sum += input;
count++;
out.println("Enter your next positive number");
input=in.nextInt();
}
if (input == 0) {
return sum;
} else return input;
}
这是我在GitBash中运行此方法时执行的代码
private static int readAndSumPositivesFrom(String input) {
ByteArrayOutputStream out_bs = new ByteArrayOutputStream();
PrintStream out=new PrintStream(out_bs);
Scanner in_s = new Scanner(new ByteArrayInputStream(input.getBytes()));
int ans = Assignment5.readAndSumPositives(in_s,out);
in_s.close();
return ans;
}
@Grade(points = 20)
@Test
public void testReadAndSumPositives() {
Assert.assertEquals(30, readAndSumPositivesFrom("10 20 0 "));
Assert.assertEquals(20, readAndSumPositivesFrom("10 -20 10 0 "));
Assert.assertEquals(10, readAndSumPositivesFrom("1 2 -2 3 -3 4 -4 0 "));
}
任何帮助表示赞赏,积分将被授予!
提前致谢。
答案 0 :(得分:1)
您正在返回错误的值。当第一个输入为input
时,您应该返回0
,而如果第一个输入不是sum
则返回input
。你正在做相反的事情。此外,如果用户首先输入正数,则将第一个输入置于循环外,然后在循环中检查并在循环中获取下一个输入必然会导致逻辑错误(或者更确切地说是语法错误,因为while(true){ //infinite loop
out.println("Enter positive number to add, 0 to stop.");
input = in.nextInt();
if(input == 0)
break;
if(input > 0)
sum+= input;
}
return sum;
未在循环外初始化)。在循环中做所有事情并检查你要返回的内容。
179,143,141,142,178
答案 1 :(得分:-1)
while(input != 0 && input != -2 && input != -3 && input != -4)
//instead of above logic,use logic mentioned below....
int sum=0;
while(input!=0)
{
if(input>0)
sum+=input;
out.println("Enter your next positive number");
input=in.nextInt();
//What is the purpose of using "count"?
}
return sum;