数组不会让我打印数组中的百分比

时间:2016-10-05 02:27:20

标签: java arrays

下面是我的代码,我的情况是我试图让百分比数组输出2位小数的%,但是我一直收到有关从double到int的有损转换的错误,我已经尝试将我的数组作为百分比无论是int还是double,但我都没有运气。

我需要做些什么来让它显示百分比而不是0或错误?

import java.util.Scanner;   // import Scanner class
import java.security.SecureRandom;

public class DiceSim
{
    public static final SecureRandom rand = new SecureRandom();
    public static final Scanner user = new Scanner(System.in);  // create scanner object called input
   // start main method
   public static void main (String[] args)
   {
      double[] percent = new double[13];
      int roll1 = 0;
      int roll2 = 0;


      System.out.printf("%n *******************************");
      System.out.printf("%n *** Dice Rolling Simulation ***");
      System.out.printf("%n *******************************");
      System.out.println();
      System.out.printf("%n Enter the number of rolls: ");

      int input = user.nextInt();
      System.out.println();
      int[] frequency = new int[13];

      for (int counter = 0; counter < input; counter++)
      {
          roll1 = diceRoll();
          roll2 = diceRoll();
          int total = roll1+roll2;
          ++frequency[total];
          double fraction = (100.00*(total/input));
          ++percent[fraction];
        }  
      System.out.printf("%s %12s %12s %n", " Sum", "Frequency", "Percentage" );
      for (int Sum = 2; Sum<percent.length; Sum++)
      {
      System.out.printf("%4d %12d %12d %n", Sum, frequency[Sum], percent[Sum]);
      }
      System.out.println();
   }
    public static int diceRoll()
    {
        int dice = 1 + rand.nextInt(6);
        return dice;
    }
}

2 个答案:

答案 0 :(得分:2)

所有数组索引的第1个不能是double。在这里:

++percent[fraction]; 

第二次将%d更改为%f。在这里:

 System.out.printf("%4d %12d %12d %n", Sum, frequency[Sum], percent[Sum]);

答案 1 :(得分:0)

%d用于小数。您希望将%f用于浮点数和双精度数。有关格式化的信息,请参阅文档:Formatter

另外,当你使用int时你得到0的原因是因为Java会截断浮点数和小数 - 它不会舍入它们。您的百​​分比可能小于100%,因此它们小于1.如果它在0和1之间的任何值,它将被截断为0。

更新: 您的问题是因为您使用double来访问带有

的数组索引
double fraction = (100.00*(total/input));
++percent[fraction];

采用int。所以这意味着它必须从一个64位的双精度转换为一个整数...我甚至不认为应该编译,所以我不确定你是如何得到的#&#i 34;精度损失&#34;。