【问题标题】:Java, something wrong with Double data type, keep returning 1.00 instead of 1.8 [duplicate]Java,Double 数据类型有问题,一直返回 1.00 而不是 1.8 [重复]
【发布时间】:2018-05-31 01:56:48
【问题描述】:

我正在为我的大学做一个项目,到目前为止代码运行良好,但当程序试图计算所有输入的平均值时,它总是给出错误的答案。 前任: 测试输入: 3 -4 5 12 -7 0(退出循环)

结果 -> 总和:9 计数器:5 平均值 = 1.0 ?应该是 1.8

如果有人可以帮忙,请给我一些建议。

public static void main(String[] args) 
{
    Scanner sc = new Scanner(System.in);
    int counter = 0;

    int intInput;
    int intLargest;
    int intSmallest;
    int intEven = 0;
    int intOdd = 0;
    int intSum = 0;
    String strMessage = "Enter a series of value (0 to quit)";    


    System.out.print(strMessage);
    System.out.println();        

   System.out.print("Enter Integer value?" + "\n");
   intInput = sc.nextInt();

        intLargest = intInput;
        if (intLargest == 0)
        {
            intLargest = 0;
        }
        else
        {
            intLargest = intInput;
        }
        /////////////////////////////////////////////////////////////

        intSmallest = intInput;
        if (intSmallest == 0)
        {
            intSmallest = 0;
        }
        else
        {
            intSmallest = intInput;
        }            



    while(intInput != 0)
    { 
    {            
      if (intInput > intLargest)
      {
          intLargest = intInput;
      }//Get the largest value        
      else if (intInput < intSmallest)
      {
          intSmallest = intInput;
      }//Get the smallest value


      if ((intInput%2) == 0)
      {
          intEven++;
      }//Get number of Even value
      else if ((intInput%2) != 0)
      {
          intOdd++;
      }//Get number of Odd value
    }


      intSum = intSum + intInput;        
      intInput = sc.nextInt();
      counter++;
    }

/************************************************/

    double doubleAvg = 0;

    if (counter > 0)
    {
        doubleAvg = intSum / counter;
    }     

/**************************************************** *****/

    System.out.println();
    System.out.print("Smallest = " + intSmallest +"\n");        
    System.out.print("Largest = " + intLargest + "\n");
    System.out.print("Total Entered = " + counter + "\n");        
    System.out.print("Even Number = " + intEven + "\n");
    System.out.print("Odd Number = " + intOdd + "\n");
    System.out.print("Average = " + doubleAvg + "\n");
    System.out.print("SUM: " + intSum + "\n");
}

}

【问题讨论】:

    标签: java loops controls


    【解决方案1】:

    intSumcounter 都声明为 int。如果将 int 除以 int,结果也将是 int。所以除法的结果是 1,然后它被转换为 double,你得到 1.0。要获得正确的结果,请将 intSum 声明为 double。

    【讨论】:

    • intSum 声明为双重...不是最好的建议...
    • 也许应该重命名变量,但在我看来,将其声明为双精度比在除法前将其转换为双精度或乘以 1.0 以将中间结果转换为双精度 @shmosel
    • 谢谢,问题解决了,我将intSum重新声明为double。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 2021-11-12
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多