正数的回报总和

时间:2016-09-23 04:37:41

标签: java loops recursion

我必须编写一个程序,该程序返回读取的正数之和,并将读取用户的输入,直到输入为零。

到目前为止,我没有计算输入的正数之和,我需要一些帮助。

这是我到目前为止所做的:

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 "));
}

任何帮助表示赞赏,积分将被授予!

提前致谢。

2 个答案:

答案 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;