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

Java 奇怪的、特定于代码的问题,可能是逻辑错误?,java,android,Java,Android,好的,我有一个程序,它取三位数字,计算每个数字0-9在所有输入的数字中出现的次数,并给出每个数字的百分比。出于某种原因,当我输入像“111”或“222”这样的数字时,它工作正常,并将该数字百分比设置为100%。如果我再加上一个数字,比如“123”,它会将所有百分比都返回为零。代码如下: 声明: private List<PickThreeNumbers> numberList = new ArrayList(); private static int[] timesOccured =

好的,我有一个程序,它取三位数字,计算每个数字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;
在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中,您需要将被除数转换为双倍数。你在做整数运算,结果要么是0,要么是1

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

在calculatePercentages中,您需要将被除数转换为双倍数。你在做整数运算,结果要么是0,要么是1。百分比[e]=(双)发生时间[e]/(双)总数;啊,这是有效的。非常感谢,道格拉斯!!我对Java很在行,但我似乎总是对这些简单的错误耿耿于怀。。。总有一天我会做好的。再次感谢@道格拉斯·琼斯:你应该写下这个作为答案,这样才能被接受:)
public String getPercentage(int digit){
    for(int t = 0; t<percentages.length;t++){
        if(digit == t){
            percentage= dm.format(percentages[t]);
        }
    }
    return percentage;
}
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);
    }
TableLayout numbersEntered, percentages, recommendedNumbers;
NumberHandler numbers;
 numbersEntered = (TableLayout)findViewById(R.id.enteredNumbersTable);
    percentages = (TableLayout)findViewById(R.id.percentagesTable);
    recommendedNumbers=(TableLayout)findViewById(R.id.recNumbersTable);
    numbers = new NumberHandler();
percentages[e] = (double)timesOccured[e] / (double)totalNumbers;