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