java - 为什么我的代码没有正确打印出最高和第一名?
问题描述
主要的:
public class Main {
private static String [] Countries={"UK", "Italy",
"Germany", "Thailand","Denmark","Japan","Spain","Argentina"};
static double average[] = new double[8];
double[] results = new double[8];
public static String getWinner(ArrayList<MissUniverse>alist){
int winner = 0;
for (int s = 0; s < alist.size(); s++){
if (alist.get(s).average() > alist.get(0).average() ) {
winner= s;
}
}
return alist.get(winner).getCountry();
}
public static String firstRunnerUp(ArrayList<MissUniverse>alist){
int firstrunnerUp =0;
for (int s = 0; s < alist.size(); s++){
if (alist.get(s).average() > alist.get(0).average() && alist.get(s).getCountry() != getWinner(alist) ) {
firstrunnerUp = s;
}
}
return alist.get(firstrunnerUp).getCountry();
}
public static void main (String[] args){
ArrayList<MissUniverse> alist = new ArrayList<MissUniverse>();
MissUniverse missUniverse[] = new MissUniverse[Countries.length];
for(int i=0;i<Countries.length;i++)
{
missUniverse[i] = new MissUniverse(Countries[i]);
missUniverse[i].getScore();
alist.add(missUniverse[i]);
}
System.out.printf("%-15s%-5s%-5s%-5s%-5s%-5s%-5s%-5s%-5s%-10s",
"Countries","1","2","3","4","5","6","7","8","Average");
System.out.println();
for (int i = 0; i < Countries.length; i++){
System.out.printf("%-13s",Countries[i]);
missUniverse[i].printInfo();
System.out.printf("%5.1f", alist.get(i).average() );
System.out.println();
}
System.out.println("The result is");
System.out.println("Winner: Miss " + getWinner(alist) );
System.out.println("1st Runner Up: Miss " + firstRunnerUp(alist) );
}
}
环球小姐:
class MissUniverse {
public static int SIZE=8;
private String country;
private double[] score;
public MissUniverse(String country){
this.country = country;
score = new double [SIZE];
}
public String getCountry(){
return country;
}
public void getScore(){
for (int i=0;i<score.length;i++)
{
score[i] = Math.random()*10;
}
}
public void setCountry(String newCountry) {
this.country = newCountry;
}
private int highest(){
int i;
double highest;
highest = score[0];
for (i = 0; i <score.length; i++)
{
if (highest < score [i])
{
highest = score[i] ;
}
}
return i;
}
private int lowest(){
int i;
double lowest;
lowest = score[0];
for (i = 0; i <score.length; i++)
{
if (lowest > score [i])
{
lowest = score[i];
}
}
return i;
}
public double average(){
double sum = 0.0;
for (int i = 0; i < score.length; i++){
sum += score[i];
}
double average;
average = (sum - score[lowest()-1] - score[highest()-1] )/ (score.length - 2);
return average;
}
public void printInfo(){
for(int i=0;i< score.length;i++){
System.out.printf("%-5.1f",score[i]);
}
}
}
为什么输出错误?
输出 1:
Countries 1 2 3 4 5 6 7 8 Average
UK 2.0 0.5 3.7 2.0 5.2 7.0 9.2 5.8 4.0
Italy 3.9 3.8 2.4 5.1 5.7 1.0 6.7 6.9 3.6
Germany 7.0 0.5 8.4 2.4 6.3 4.4 8.8 7.1 5.1
Thailand 6.9 8.7 3.9 4.7 4.9 3.5 4.7 9.4 4.7
Denmark 0.5 0.9 3.4 3.3 6.3 10.0 7.0 6.6 4.1
Japan 4.2 2.1 5.9 9.4 9.8 2.3 4.2 9.7 4.7
Spain 6.5 4.0 6.5 3.6 8.5 8.5 9.2 9.4 6.2
Argentina 0.4 6.6 6.5 2.3 2.6 4.5 5.6 3.7 4.1
The result is
Winner: Miss Argentina
1st Runner Up: Miss Spain
它应该是冠军:西班牙小姐,亚军:德国小姐。但是 getWinner(alist) 和 firstrunnerup(alist) 中的逻辑不正确吗?
输出 2:
Countries 1 2 3 4 5 6 7 8 Average
UK 0.5 9.2 2.8 1.3 7.0 9.6 6.9 6.9 5.1
Italy 4.3 7.6 2.3 3.3 8.6 9.3 7.0 3.1 6.5
Germany 2.2 0.4 6.1 4.4 5.8 3.1 5.5 9.1 3.1
Thailand 1.7 7.1 6.2 9.5 7.9 4.9 0.8 8.3 5.0
Denmark 1.6 1.6 2.5 6.5 8.8 5.8 3.7 1.2 4.9
Japan 7.4 1.5 5.6 1.6 3.1 5.8 3.2 3.4 4.1
Spain 0.2 0.9 0.3 7.2 1.5 7.8 7.3 8.6 2.7
Argentina 9.1 8.9 0.3 5.1 2.6 8.8 4.3 5.1 5.7
The result is
Winner: Miss Argentina
1st Runner Up: Miss Italy
它应该是:获胜者:意大利亚军:阿根廷
有人可以指出我正确的方向吗?我认为错误应该出现在 getwinner 和 firstrunnerup 方法中,但我无法发现错误。
解决方案
在 getWinner() 改变
if (alist.get(s).average() > alist.get(0).average() ) {
至
if (alist.get(s).average() > alist.get(winner).average() ) {
同样在 getFirstRunnerUp() 更改
if (alist.get(s).average() > alist.get(0).average() && alist.get(s).getCountry() != getWinner(alist) ) {
至
if (alist.get(s).average() > alist.get(firstRunnerUp).average() && alist.get(s).getCountry() != getWinner(alist) ) {
推荐阅读
- python - Jupyter Notebook 和 Conda 命令行之间的包不一致
- electron - 电子 ipcRenderer 一次传递一个字母的字符串
- tensorflow - Tensorflow TensorBoard 不显示 acc、loss、acc_val 和 loss_val 只显示 epoch_accuracy 和 epoch_loss
- c# - Office 365 中的租户是什么?
- javascript - 像猫头鹰旋转木马一样帮助 Gucci
- android - 使用 viewtype , onBindViewHolder 和 onCreateViewHolder 是不同的
- javascript - 如何将firebase返回的数据保存到变量
- swift - 如何显示稍微超出 UITextView 的字符的其余部分?
- reactjs - 是否可以将 Puppeteer 与 React Native 一起使用?
- c++ - 将静态字符数组中的字符分配给动态分配的字符数组 - 访问冲突