如何将数组变量用于IF语句?

时间:2014-12-05 17:45:50

标签: java

我正在开发一个简单的出租车计价器系统。我不知道如何使用它来实现它。我编写了一个代码,但卡在IF语句中,我必须插入一个数组变量。我不确定这是否是实现它的正确方法。

这是逻辑。

  • 第一个Km是50 / - 。
  • 然后下一个10公里将收取45 / - 每公里。例如:如果2km已经消失 ,费用为50 / - + 45 / - = 95 / - ,如果3km已经消失140 /-.
  • 下一个10公里将收费35 / - 每公里
  • 25 / - 无论在超过10公里后超过多少公里,每公里都会收费。

这是我目前编码的代码

private void btn_calActionPerformed(java.awt.event.ActionEvent evt) {                                        
        int kms1 = 50;
        int kms2 = 45;
        int kms3 = 35;
        int kms4 = 25;
        String[] firstkm={"3,4,5,6,7,8,9,10,11"};
        if(txt_km.getText().equals("1")){
            lblout.setText(""+kms1);
        }
        if(txt_km.getText().equals("2")){
            lblout.setText(""+(kms1+kms2));
        }if(txt_km.getText().equals(firstkm)){
            int get = Integer.parseInt(txt_km.getText());
            int rate = get+kms2;
            lblout.setText(""+rate);
        }

}  

如果有任何其他方法可以解决这个问题,请提及。

4 个答案:

答案 0 :(得分:1)

int fare = 0;
int distance = 0;
if (distance > 21) {
    fare += (distance - 21) * 25;
    distance = 21;
}
if (distance > 11) {
    fare += (distance - 11) * 35;
    distance = 11;
}
if (distance > 1) {
    fare += (distance - 1) * 45;
    distance = 1;
}
if (distance > 0) {
    fare += distance * 50;
}

然后通过将幻数放入数组并循环遍历数组(4次)来重构。

答案 1 :(得分:0)

这里有一个提示:实施此方法

/**
This method returns the amount a passenger must pay for this kilometer of their trip
*/
public int chargeForKilometer(int kilometerNumberInTrip) {
  //...
}

答案 2 :(得分:0)

String[] firstkm={3,4,5,6,7,8,9,10,11};
    if(txt_km.getText().equals(firstkm[1])){
        lblout.setText(""+kms1);
    }

...

答案 3 :(得分:0)

如果您的条件发生变化,并且您希望避免在代码中添加条件,我会编写一个可配置的代码。

public int calculateRate(int kmCount){
    int baseRate = 50;
    int[] stepRate = {45,35};
    int step = 10;
    int fare = 0;
    int threshold = 21;
    int beyondThresholdRate = 25;

    if(kmCount>0){
        fare = baseRate;
        fare += (kmCount - threshold)<0?0:(kmCount - threshold)*beyondThresholdRate;
        kmCount = kmCount - 1;
        for(int i=0;i<=((kmCount/step) + (kmCount%step>0?1:0));i++){
            fare += (kmCount/step)==0?(kmCount%step)*stepRate[i]:step*stepRate[i];
            kmCount -=step;
            if(i==stepRate.length-1) break;
        }
    }
    return fare;
}

虽然有点复杂,但是很灵活。