Java 阵列赢得';t让我打印数组中%的和

Java 阵列赢得';t让我打印数组中%的和,java,arrays,Java,Arrays,下面是我的代码,我的情况是,我试图让百分比数组以2位小数的形式输出%s,但是我不断得到一个关于从double到int的有损转换的错误,我尝试将百分比数组同时作为int和double,但我没有运气 我需要做什么才能让它显示百分比而不是0或错误 import java.util.Scanner; // import Scanner class import java.security.SecureRandom; public class DiceSim { public static

下面是我的代码,我的情况是,我试图让百分比数组以2位小数的形式输出%s,但是我不断得到一个关于从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;
    }
}
import java.util.Scanner;//导入扫描仪类
导入java.security.SecureRandom;
公共类DiceSim
{
public static final SecureRandom rand=new SecureRandom();
public static final Scanner user=new Scanner(System.in);//创建名为input的Scanner对象
//启动主方法
公共静态void main(字符串[]args)
{
double[]百分比=新的double[13];
int roll1=0;
int-roll2=0;
System.out.printf(“%n*************************************”);
System.out.printf(“%n***骰子滚动模拟***”);
System.out.printf(“%n*************************************”);
System.out.println();
System.out.printf(“%n输入卷数:”);
int input=user.nextInt();
System.out.println();
int[]频率=新int[13];
用于(int计数器=0;计数器<输入;计数器++)
{
ROLL 1=diceRoll();
roll2=骰子滚动();
int total=roll1+roll2;
++频率[总数];
双分数=(100.00*(总/输入));
++百分比[分数];
}  
System.out.printf(“%s%12s%12s%n”、“总和”、“频率”、“百分比”);

for(int Sum=2;Sum
%d
表示十进制。您希望使用
%f
表示浮点和双精度。有关格式,请参阅文档:

另外,当你使用整数时得到0的原因是因为Java截断了浮点数和小数-它不会对它们进行取整。你的百分比可能小于100%,所以它们小于1。如果介于0和1之间,它将被截断为0

更新: 您的问题是因为您正在使用double访问具有

double fraction = (100.00*(total/input));
++percent[fraction];

它需要一个int。这意味着它必须从一个64位的双精度转换成int。我甚至不认为应该编译它,所以我不确定你是如何得到“精度损失”的。所有数组索引中的第一个不能是双精度的。这里:

++percent[fraction]; 
第二,将%d更改为%f。此处:

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

你必须比“它不起作用”更具体,它说在++百分比[分数]下从double到int的损失转换;它似乎没有计算我得到的百分比,以2位小数形式输出为0.00,但他们都说0.00%,你能更新你的代码,让我们看看你做了什么吗?因为现在你对这行有问题:++percent[分数];因为数组长度是13,但分数可能比索引13高得多。这里是:int分数=(int)(100.00*(total/input));然后这一行出现逻辑问题:System.out.printf(“%s%12s%12s%n”,“Sum”,“Frequency”,“Percentage”);