编写一个方法,查找所有正条目的乘积,同时忽略否定条目

时间:2018-03-16 01:29:02

标签: java

我们必须编写一个从菜单中调用的方法,该菜单将找到输入数据值集合的乘积。程序应忽略所有负值,并在遇到零值时终止。我们编写了一些代码,但它没有按照应有的方式运行。我们已将其删除到忽略负数的位置,但不会正确计算和显示产品。

public void prodNoNegative () throws IOException
{
    float input = 0;
    float temp = 0;
    String s;

    System.out.println(" ");
    System.out.println(" ");
    System.out.println("Enter a string of numbers followed by 0 to exit");

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String line = br.readLine();

    StringTokenizer st = new StringTokenizer(line);
    input = Float.parseFloat(st.nextToken());

    if (input==0) {
        System.out.print("END");
        System.exit(1);
    }

    while (input !=0) {
        if (input<0) {
            System.out.println (input + " is ignored.");
        } else if (input>0);
        {
            temp = input * temp;
        }

        input = Float.parseFloat(st.nextToken());
    }

    s = Float.toString(temp);

    System.out.println("The product of all positive inputs is " +s);
}

1 个答案:

答案 0 :(得分:1)

您将temp初始化为0,因此无论您乘以什么,它仍然会为0.您应该将temp初始化为1.

此外,您还有一个额外的分号:

else if (input>0);
{
    temp = input * temp;
}

删除它,因为它被解释为一个空语句,因此无论else if如何都会执行下一行。

第二次编辑:

您可以添加最初设置为false的标志布尔值,并在temp = input * temp之后的行中将其赋值为true。如果所有输入值都为负,则布尔值永远不会设置为true。然后你可以在打印结果时检查布尔值。

像这样:

...
boolean flag = false;
...
else if (input>0);
{
    temp = input * temp;
    flag = true;
}
...
if (flag) System.out.println("The product of all positive inputs is " + s);
else System.out.println("You didn't enter any positive numbers.");