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