0
public class apples {

private static String[] level1 = new String[] { "A", "B", "I", "K", "N", "O", "P", "S", "T", "W" };



public static void main(String[] args) {

        int[] scores1 = { 99, 80, 56, 88, 70, 35, 67, 60, 78, 56 };

        int[] correct1 = {20, 20, 13, 15, 22, 18, 19, 21, 23, 25};

        int[] incorrect1 = {2, 1, 5, 2, 2, 5, 8, 1, 0, 0};


        double[] percentage1 = new double[correct1.length];
        for(int a = 0; a < correct1.length; a++ ){ 
                 percentage1[a] = (double)((correct1[a] / (correct1[a] + incorrect1[a]))*100);
            }


        System.out.println("Character \t Correct \t Incorrect \t Percentage");
            for(int counter = 0; counter<scores1.length;counter++){
                System.out.println(level1[counter] + "\t\t " + correct1[counter] + "\t\t " + incorrect1[counter] + "\t\t " + percentage1[counter]);
            }


}

}

这将输出一个包含 4 个标题的表格。字符、正确和不正确的列按预期显示。但是,百分比行无法正常工作。例如,字符“A”、正确的 20 和错误的 2 给出的百分比为 0.0。任何“不正确”值 > 0 输出百分比值 0,任何 = 0 的“不正确”值给出 100 的百分比值(这是正确的)......有人可以解释我哪里出错了吗?

4

3 回答 3

3

您在这里处理整数,对于整数除法,结果被截断。您需要将原始值转换为双精度,或将一部分乘以将1.0其作为双精度:

percentage1[a] = ((correct1[a]*1.0 / (correct1[a] + incorrect1[a]))*100);
于 2013-04-14T13:20:25.283 回答
1
 percentage1[a] = (double)((correct1[a] / (correct1[a] + incorrect1[a]))*100);

double 计算完成后,上面的代码转换为 a 。

要作为计算的一部分进行转换,请使用:

percentage1[a] = (( ((double)correct1[a]) / (correct1[a] + incorrect1[a]))*100);
于 2013-04-14T13:20:22.827 回答
1

你在这里计算

 percentage1[a] = (double)((correct1[a] / (correct1[a] + incorrect1[a]))*100);

执行整数除法(您只需将它们转换为double)。如果您希望它们返回实际的浮点除法结果,则必须在计算之前将所有操作数转换为 double。

所以最快的选择是改变这个:

    double[] correct1 = {20, 20, 13, 15, 22, 18, 19, 21, 23, 25};

    double[] incorrect1 = {2, 1, 5, 2, 2, 5, 8, 1, 0, 0};

另一个是将计算更改为这样的

percentage1[a] = (1.0 * correct1[a] / (correct1[a] + incorrect1[a]))*100;

或简化一点:

percentage1[a] = 100.0 * correct1[a] / (correct1[a] + incorrect1[a]);
于 2013-04-14T13:22:07.360 回答