Java 为什么我的阵列存储相同值的多个副本

Java 为什么我的阵列存储相同值的多个副本,java,Java,这是输出的样子: Name: [a, b, c, d] Years flown: [1, 11, 7, 2] Bonus amount: [0.0, 2410.0, 0.0, 2410.0, 1206.0, 0.0, 2410.0, 1206.0, 515.0] Average traveled miles: 666.66 Number earning bonus: 3 Total bonus amounts: $10157.00 Number of miles flown: [222.22,

这是输出的样子:

Name: [a, b, c, d]
Years flown: [1, 11, 7, 2]
Bonus amount: [0.0, 2410.0, 0.0, 2410.0, 1206.0, 0.0, 2410.0, 1206.0, 515.0]
Average traveled miles: 666.66
Number earning bonus: 3
Total bonus amounts: $10157.00
Number of miles flown: [222.22, 555.55, 1000.0, 888.88]
Pilot count: 4
有人知道怎么了吗?因为有4个名字,我应该只得到4个奖金,但我得到了所有这些额外的金额。另外,对于获得奖金的人数,应该只有2人,因为你只能获得奖金,因为你的飞行里程数大于平均值,但它显示有3人获得奖金

public class PilotBonus {
   public static void main(String[] args) {        
      while (question.equalsIgnoreCase("n")) {
         if (pilotCount < MAX_PILOTS) {
            pilotCount++;       
            pilotName = getName(pilotName);
            numYrsFlown = getYrsFlown(numYrsFlown);
            numMilesFlown = getMilesFlown(numMilesFlown);
            avgMilesFlown = getAvg(pilotCount, numMilesFlown);
            bonusEligibility = determine(avgMilesFlown, numMilesFlown);
            bonusAmt = getBonusAmt(bonusEligibility, numYrsFlown, bonusAmt);
            numEarningBonus = getNumEarningBonus(bonusEligibility, numYrsFlown);
            totalBonus = calcTotalBonus(bonusAmt);
         }
         else {
            JOptionPane.showMessageDialog(null, "Too many pilots");
         }    
      }         
      if (question.equalsIgnoreCase("y")) {
         print(pilotName, numYrsFlown, bonusAmt, avgMilesFlown, numEarningBonus, 
            totalBonus, numMilesFlown, pilotCount); 
      } 
   }

   public static boolean determine(double avgMilesFlown, double[] numMilesFlown) {

      for (double d : numMilesFlown) {
         if (d > avgMilesFlown) {        
            return true;
         }          
      }
      return false;
   }

   public static double[] getBonusAmt(boolean bonusEligibility, int[] numYrsFlown, double[] bonusAmt) {

      double bonus = 0;

      if (bonusEligibility == true) {
         for (int i : numYrsFlown) {       
            if (i >= 9) {
               bonus = 2410.00;
            }
            if (i < 9) {
               bonus = 1206.00;
            }
            if (i < 6) {
               bonus = 515.00;
            }
            if (i < 2) {
               bonus = 0.00;
            }

            bonusAmt = Arrays.copyOf(bonusAmt, bonusAmt.length + 1);
            bonusAmt[bonusAmt.length - 1] = bonus;
         }        
      }

      return bonusAmt; 
   }

   public static int getNumEarningBonus(boolean bonusEligibility, int[] numYrsFlown) {

      int count = 0;

      for (int i : numYrsFlown) {
         if (i >= 2 && bonusEligibility == true) {
            count++;
         }
      }

      return count;
   }
public-class-PilotBonus{
公共静态void main(字符串[]args){
while(问题等信号情况(“n”)){
if(引航员数量<最大引航员){
pilotCount++;
pilotName=getName(pilotName);
numYrsFlown=getYrsFlown(numYrsFlown);
numMilesFlown=getMilesFlown(numMilesFlown);
avgMilesFlown=getAvg(pilotCount,numMilesFlown);
骨可用性=测定(平均流速、单位流速);
bonusAmt=getBonusAmt(BonuSaLibility,numYrsFlown,bonusAmt);
numEarningBonus=获取numEarningBonus(骨可用性,numYrsFlown);
totalBonus=calcTotalBonus(bonusAmt);
}
否则{
showMessageDialog(null,“导频太多”);
}    
}         
if(问题同等信号情况(“y”)){
打印(pilotName、numYrsFlown、bonusAmt、avgMilesFlown、numEarningBonus、,
totalBonus、numMilesFlown、pilotCount);
} 
}
公共静态布尔确定(双avgMilesFlown,双[]numMilesFlown){
用于(双d:numMilesFlown){
如果(d>avgMilesFlown){
返回true;
}          
}
返回false;
}
public static double[]getBonusAmt(布尔bonusEligibility,int[]numYrsFlown,double[]bonusAmt){
双倍奖金=0;
if(骨可利用性==真){
对于(int i:numYrsFlown){
如果(i>=9){
奖金=2410.00;
}
如果(i<9){
奖金=1206.00;
}
如果(i<6){
奖金=515.00;
}
如果(i<2){
奖金=0.00;
}
bonusAmt=Arrays.copyOf(bonusAmt,bonusAmt.length+1);
博努萨姆特[博努萨姆特长度-1]=奖金;
}        
}
返回bonusAmt;
}
公共静态整型整型getNumEarningBonus(布尔型bonusEligibility,整型[]numYrsFlown){
整数计数=0;
用于(int i:numYrsFlown){
如果(i>=2&&bonusEligibility==true){
计数++;
}
}
返回计数;
}

您应该从
getBonusAmt
中删除
double[]bonusAmt
参数,并将同名变量添加到此方法的开头

double[] bonusAmt = new double[0];

你能提供一个独立测试来复制你的问题吗?你试过用调试器调试你的代码吗?我没有得到编译器错误,如果这是你的意思的话。不,我建议你写一个独立测试,用调试器来调试你的代码。我没有提到错误,编译器或其他。