1

ユーザーに自分の場所を入力してもらいます。そして彼らの場所に基づいて、賃金の違いがあります。ifステートメントは変数「pay」を変更しません誰かが私を助けることができますか?

import java.util.HashMap;
import javax.swing.*;

public class TimeSheet {

    public static void main(String[] args) {

        String loc;
        String[] startday = new String[7];
        String[] endday = new String[7];
        int x = 0;
        int y = 0;
        int num = 1;
        int location;
        double starttime;
        double endtime;
        double hour = 0;
        double total = 0;
        double pay = 0;
        double totalpay;

        loc = JOptionPane.showInputDialog(null, "Enter your Work Location");
        location = Integer.parseInt(loc);

        if (location == 100 && location < 200 ) {
            pay = 10.00;
        }
        else if (location == 200 && location < 300) {
            pay = 7.50;
        }
        else if (location == 300 && location < 400) {
            pay = 9.25;
        }
        else if (location == 400 && location < 500) {
            pay = 13.50;
        }
        else if (location == 500 && location < 600) {
            pay = 8.00;
        }

        HashMap<String, Double> map = new HashMap<String, Double>();
        map.put("1",9.0);
        map.put("2",9.5);
        map.put("3",10.0);
        map.put("4",10.5);
        map.put("5",11.0);
        map.put("6",11.5);
        map.put("7",12.0);
        map.put("8",12.5);
        map.put("A",13.0);
        map.put("B",13.5);
        map.put("C",14.0);
        map.put("D",14.5);
        map.put("E",15.0);
        map.put("F",15.5);
        map.put("G",16.0);
        map.put("H",16.5);
        map.put("I",17.0);

        while (x < 7 && y < 7) {

            startday[x] = JOptionPane.showInputDialog(null, "Enter Day "+num+" 's Starting code");
            endday[y] = JOptionPane.showInputDialog(null, "Enter Day "+num+" 's Ending code");

            starttime = map.get(startday[x]);
            endtime = map.get(endday[y]);

            hour = endtime - starttime;
            total = total + hour;
            totalpay = total*pay;

            JOptionPane.showMessageDialog(null, "total hour" + total);
            JOptionPane.showMessageDialog(null, "total pay for the week is " + totalpay);

            x++;
            y++;
            num++;


        }

    }

}
4

6 に答える 6

3

あなたの条件は次のようなものです:

else if (location == 200 && location < 300) {

英語に翻訳する

location がちょうど 200 で 300 未満の場合。

あなたはおそらくそれを

location が 200 以上 300 未満の場合。

于 2012-12-04T19:05:45.310 に答える
1

これが、if ブロックが期待どおりに機能しない理由である可能性があります。

if (location == 100 && location < 200 ) {
    pay = 10.00;
}
else if (location == 200 && location < 300) {
    pay = 7.50;
}
else if (location == 300 && location < 400) {
    pay = 9.25;
}
else if (location == 400 && location < 500) {
    pay = 13.50;
}
else if (location == 500 && location < 600) {
    pay = 8.00;
}

ロケーション システムをどのように定義しているかに応じて、次のいずれかになります。

if (location < 100 ) {
    // Do something with pay here
    pay = 0.00;
}
else if (location < 200 ) {
    pay = 10.00;
}
else if (location < 300) {
    pay = 7.50;
}
else if (location < 400) {
    pay = 9.25;
}
else if (location < 500) {
    pay = 13.50;
}
else if (location < 600) {
    pay = 8.00;
}
else {
    // You should probably have some error-handling here
    // as fail-safe default for defensive programming
}

または

if (location == 100) {
    pay = 10.00;
}
else if (location == 200) {
    pay = 7.50;
}
else if (location == 300) {
    pay = 9.25;
}
else if (location == 400) {
    pay = 13.50;
}
else if (location == 500) {
    pay = 8.00;
}
else {
    // You should probably have some error-handling here
    // as fail-safe default for defensive programming
}
于 2012-12-04T19:07:42.410 に答える
1

単純な Programmer 101 エラー -- OR を使用する必要があるときに AND を使用しました。100、200、300、400、500 以外の値は、100 AND <200 などにする必要があるため、失敗します。以下を参照してください。

if (location == 100 || location < 200 ) {     
    pay = 10.00;
}
else if (location == 200 || location < 300) { 
    pay = 7.50;
}
else if (location == 300 || location < 400) {
    pay = 9.25;
}
else if (location == 400 || location < 500) {
    pay = 13.50;
}
else if (location == 500 || location < 600) {
    pay = 8.00;
}
于 2012-12-04T19:08:38.797 に答える
0

これには if-else の混乱は本当に必要ありません。場所のマップはそれをかなりきれいにします。

Map<String, Double> locMap = new HashMap<String, Double>();
locMap.put("100", 7.77);
locMap.put("500", 5.55);

pay = locMap.get(locStringFromInput);
于 2012-12-04T19:24:44.143 に答える
0

あなたのif状態は本当に奇妙に見えます。と>=いうより、ということでした==か?

if (location == 100 && location < 200 ) {
             ^^ should this be >= ?

ちなみに、これらのチェックの半分は不要です。

    if (location < 100) {
    }
    else if (location < 200 ) {
        pay = 10.00;
    }
    else if (location < 300) {
        pay = 7.50;
    }
    else if (location < 400) {
        pay = 9.25;
    }
    else if (location < 500) {
        pay = 13.50;
    }
    else if (location < 600) {
        pay = 8.00;
    }
于 2012-12-04T19:05:44.830 に答える
0

すべての if ステートメントには、次のような && が含まれています: (location == 100 && location < 200)。これらは||に置き換える必要があります。.

&& = AND 演算子
|| = OR 演算子

以下の変更を参照してください。

if (location == 100 || location < 200 ) {
    pay = 10.00;
}
else if (location == 200 || location < 300) {
    pay = 7.50;
}
else if (location == 300 || location < 400) {
    pay = 9.25;
}
else if (location == 400 || location < 500) {
    pay = 13.50;
}
else if (location == 500 || location < 600) {
    pay = 8.00;
}
于 2012-12-04T19:12:48.167 に答える