程序仅在最后输入数组中的负数时有效

时间:2014-01-25 01:08:18

标签: java arrays methods

出于某种原因,当在任何正数之前输入负数时,我的computePositiveSum最终输出“正数之和”是错误的。看起来正在发生的事情不是忽略负数,而是从总数中减去它的总和。因此,如果我的输入为(-4,2,3),则表示正数之和为1.我不确定该方法有什么问题。

/*  Description: Write a program that reads in a sequence of numbers
                (not necessary integers) from standard input until 0
                 is read, and stores them in an array. This is done
                 using iteration (choose for, while, or do while loop).
                 You may assume that there will not be more than 100 numbers.*/
import java.util.Scanner;
import java.text.DecimalFormat;


public class Assignment2
{
     public static void main (String[] args)
     {

    Scanner scan= new Scanner(System.in);
    int count=0;
    double[] num= new double[100];

    for(int i=0;i<num.length;++i)
        {
        num[i]= scan.nextDouble();
        if (num[i] == 0) {
           break;        }
        count++;
        }
                double min= findMin(num,count);
                double pos= computePositiveSum(num, count);
                int c= countNegative(num,count);
                DecimalFormat fmt = new DecimalFormat ("0");
                DecimalFormat fmt2 = new DecimalFormat ("$0.00");

                System.out.println("The minimum number is " +fmt.format(min));
                System.out.println("The sum of the positive numbers is "+fmt2.format(pos));
                System.out.println("The total number of negative numbers is " +c);
    }//End Main



     public static double findMin(double[] num, int count)
     {
           double min = num[0];
           for(int i=1;i<count;i++){
              if(num[i] < min)
              {
                    min = num[i];
              }
                                 }
              return min;
     }//end findMin
     public static double computePositiveSum(double[] num, int count)
     {
        double pos=num[0];
        for(int i=1;i<count;i++){
            if(num[i] > 0)
            {
                pos=pos+num[i];
            }
                                }
        return pos;

    }
     public static int countNegative(double[] num, int count)
     {
         double a=num[0];
         int c=0;
         for(int i=0;i<count;i++){
             if(num[i] < 0)
             {

                 c++;
             }

                                  }
        return c;
      }//end countNegative


}

4 个答案:

答案 0 :(得分:3)

您正在为实际总和pos分配数组中第一个元素的值。因此,如果第一个元素是否定,它将被添加到总和中(代码中没有检查以确定它是否为正)。

要解决此问题,请使用pos初始化总和0(顺便说一句,它不是描述性名称)。然后从for循环0循环,而不是1

public static double computePositiveSum(double[] num, int count)
{
    double pos = 0;
    for (int i = 0; i < count; i++) {
        if (num[i] > 0) {
            pos = pos + num[i];
        }
    }
    return pos;
}

注意:我建议您使用更具描述性的名称命名变量。我会声明pos名为sum。当然这与结果无关,但对于人们理解代码很有用。

答案 1 :(得分:1)

您没有检查数组的第一个元素

 public static double computePositiveSum(double[] num) {
    double sum = 0.0;
    for(double d : num) {
        if(d > 0) {
            sum += d;
        }
    }
    return sum;

}

答案 2 :(得分:1)

因为你正在做

double pos = num[0];

然后浏览你需要做的数组的其余部分

double pos = 0;
for (int i = 0; ...)

答案 3 :(得分:0)

您需要检查元素0是否大于零。