java - 奇怪的、特定于代码的问题,可能是逻辑错误?

标签 java android

好的,我有一个程序,它接受三位数,并计算每个数字(0-9)在所有输入的数字中出现的次数,并给出每个数字的百分比。由于某种原因,当我输入“111”或“222”等数字时,它可以正常工作并将该数字百分比设置为 100%。如果我添加另一个数字,例如“123”,它会将所有百分比返回为零。代码如下:

声明:

private List<PickThreeNumbers> numberList = new ArrayList();
private static int[] timesOccured = {0,0,0,0,0,0,0,0,0,0};
private static double[] percentages = {0,0,0,0,0,0,0,0,0,0};
private static int totalNumbers;
private DecimalFormat dm = new DecimalFormat("0.00");
private static String percentage, timesOccuredString;

这将计算每个数字在数字列表中出现的次数:

    private void calculateTimesOccured(){
    resetAllCalculations();
    for(int i = 0; i < numberList.size();i++){
        for(int r = 1; r <=3; r++){
            for(int b = 0; b <=9; b++){
                if (numberList.get(i).getSingleDigit(r) == b){
                    timesOccured[b]+=1;
                }
            }
        }
    }
}

然后,计算百分比:

private void calculatePercentages(){
    for(int w = 0; w < timesOccured.length; w++){
        totalNumbers+=timesOccured[w];
    }

    for(int e = 0; e < percentages.length; e++){
        percentages[e] = timesOccured[e] / totalNumbers;
        percentages[e]*=100;
    }
}

然后,这将返回主要 Activity 的百分比:

public String getPercentage(int digit){
    for(int t = 0; t<percentages.length;t++){
        if(digit == t){
            percentage= dm.format(percentages[t]);
        }
    }
    return percentage;
}

最后,这是主 Activity 类中动态生成表格的方法:

percentages.setStretchAllColumns(true);
    percentages.removeAllViews();
    for(int i = 0; i <=9; i++){
        TableRow tr = new TableRow(this);
        TextView digit = new TextView(this);
        TextView timesOccured = new TextView(this);
        TextView percent = new TextView(this);

        digit.setText(String.valueOf(i)+":");
        timesOccured.setText(numbers.getTimesOccuredString(i));
        percent.setText(numbers.getPercentage(i));

        digit.setTextColor(Color.WHITE);
        timesOccured.setTextColor(Color.WHITE);
        percent.setTextColor(Color.WHITE);

        tr.addView(digit);
        tr.addView(timesOccured);
        tr.addView(percent);

        if(i%2 != 0){
            tr.setBackgroundColor(Color.parseColor("#333333"));
        }else{
            tr.setBackgroundColor(Color.parseColor("#444444"));
        }

        percentages.addView(tr);
    }

这是主 Activity 类中的声明:

TableLayout numbersEntered, percentages, recommendedNumbers;
NumberHandler numbers;

在 OnCreate 方法中使用此代码:

 numbersEntered = (TableLayout)findViewById(R.id.enteredNumbersTable);
    percentages = (TableLayout)findViewById(R.id.percentagesTable);
    recommendedNumbers=(TableLayout)findViewById(R.id.recNumbersTable);
    numbers = new NumberHandler();

无论发生什么情况,如果我输入多个特定数字(即,如果我输入“222”、“222”,则可以通过将“2”设置为“100%”来工作,但如果我添加任何其他数字将它们全部设置为零。)

有什么想法吗?

最佳答案

在calculatePercentages中,您需要将被除的数字转换为 double 。您正在进行整数数学运算,结果要么是 0,要么是 1。

percentages[e] = (double)timesOccured[e] / (double)totalNumbers; 

关于java - 奇怪的、特定于代码的问题,可能是逻辑错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18669340/

相关文章:

java - Java 中多线程同步不起作用

java - 减少 if-else 语句中使用的变量数量

java - oracle中将资源加载到java中

java - 无法完全停止我的线程

安卓 : passing parameters to a tab

java - 从导入的电子表格数据的字符串数组中获取特定 'elements' 的最简单方法?

java - 我如何从 Intent 中获得额外的(作为 Long 类型)?

android - 如何在 MvxSpinner 中设置选中项

android - 偏好类别应该有键吗?

android - 无法解析配置 ':app:_debugCompile' 的所有依赖项 -Facebook