带数据的Java if、else语句

带数据的Java if、else语句,java,if-statement,Java,If Statement,我是一个编程新手,我在编程生肖程序时遇到了麻烦。由于生肖与特定的数据相关联,而不是与一个月相关联,因此更难创建代码。我的问题是:当我输入我的生日和出生月份时,它会显示错误的星座。我做错了什么? 这是我的代码: String day = DD.getText(); int dayinput; dayinput = Integer.parseInt(day); String month = MM.getText(); int monthinput; monthinput = Integer.pa

我是一个编程新手,我在编程生肖程序时遇到了麻烦。由于生肖与特定的数据相关联,而不是与一个月相关联,因此更难创建代码。我的问题是:当我输入我的生日和出生月份时,它会显示错误的星座。我做错了什么? 这是我的代码:

String day = DD.getText();
int dayinput;
dayinput = Integer.parseInt(day);


String month = MM.getText();
int monthinput;
monthinput = Integer.parseInt(month);

if (monthinput == 12 && dayinput <= 23 || monthinput == 1 && dayinput <= 20) {
    jLabel1.setText("Capricorn");
} else {
    jLabel1.setText("Aquarius");
}

if (monthinput == 1 && dayinput >= 21 || monthinput == 2 && dayinput <= 18) {
    jLabel1.setText("Aquarius");
} else {
    jLabel1.setText("Pisces");
}

if (monthinput == 2 && dayinput >= 19 || monthinput == 3 && dayinput <= 20) {
    jLabel1.setText("Pisces");
} else {
    jLabel1.setText("Aries");
}

if (monthinput == 3 && dayinput >= 21 || monthinput == 4 && dayinput <= 20) {
    jLabel1.setText("Aries");
} else {
    jLabel1.setText("Taurus");
}

if (monthinput == 4 && dayinput >= 21 || monthinput == 5 && dayinput <= 21) {
    jLabel1.setText("Taurus");
} else {
    jLabel1.setText("Gemini");
}

if (monthinput == 5 && dayinput >= 22 || monthinput == 6 && dayinput <= 21) {
    jLabel1.setText("Gemini");
} else {
    jLabel1.setText("Cancer");
}

if (monthinput == 6 && dayinput >= 22 || monthinput == 7 && dayinput <= 23) {
    jLabel1.setText("Cancer");
} else {
    jLabel1.setText("Leo");
}

if (monthinput == 7 && dayinput >= 24 || monthinput == 8 && dayinput <= 23) {
    jLabel1.setText("Leo");
} else {
    jLabel1.setText("Virgo");
}

if (monthinput == 8 && dayinput >= 24 || monthinput == 9 && dayinput <= 23) {
    jLabel1.setText("Virgo");
} else {
    jLabel1.setText("Libra");
}

if (monthinput == 9 && dayinput >= 24 || monthinput == 10 && dayinput <= 23) {
    jLabel1.setText("Libra");
} else {
    jLabel1.setText("Scorpio");
}

if (monthinput == 10 && dayinput >= 24 || monthinput == 11 && dayinput <= 22) {
    jLabel1.setText("Scorpio");
} else {
    jLabel1.setText("Sagittarius");
}

if (monthinput == 10 && dayinput >= 23 || monthinput == 11 && dayinput <= 22) {
    jLabel1.setText("Sagittarius");
} else {
    jLabel1.setText("Capricorn");
}
String day=DD.getText();
整数日输入;
dayinput=Integer.parseInt(天);
字符串month=MM.getText();
国际蒙廷普特;
monthinput=Integer.parseInt(月);
如果(monthinput==12&&dayinputdayinput=22


if(monthinput==12&&dayinportOK,我看看你的问题,作为
reviewer
我更容易编写可读性更强的代码,而不是在多个
if…else
中找到一个bug

public static void main(String... args) {
    int day = Integer.parseInt(DD.getText());
    int month = Integer.parseInt(MM.getText());
    ZodiacSign zodiacSign = ZodiacSign.get(day, month);
    JLabel jLabel1 = new JLabel(zodiacSign.name());
    System.out.println(jLabel1.getText());
}

public enum ZodiacSign {
    Aries(21, Calendar.MARCH, 20, Calendar.APRIL),
    Taurus(21, Calendar.APRIL, 21, Calendar.MAY),
    Gemini(22, Calendar.MAY, 21, Calendar.JUNE),
    Cancer(22, Calendar.JUNE, 22, Calendar.JULY),
    Leo(21, Calendar.JULY, 21, Calendar.AUGUST),
    Virgo(22, Calendar.AUGUST, 23, Calendar.SEPTEMBER),
    Libra(24, Calendar.SEPTEMBER, 23, Calendar.OCTOBER),
    Scorpio(24, Calendar.OCTOBER, 22, Calendar.NOVEMBER),
    Sagittarius(23, Calendar.NOVEMBER, 22, Calendar.DECEMBER),
    Capricorn(23, Calendar.DECEMBER, 20, Calendar.JANUARY),
    Aquarius(21, Calendar.JANUARY, 19, Calendar.FEBRUARY),
    Pisces(20, Calendar.FEBRUARY, 20, Calendar.MARCH);

    private final int dayFrom;
    private final int dayTo;
    private final int monthFrom;
    private final int monthTo;

    ZodiacSign(int dayFrom, int monthFrom, int dayTo, int monthTo) {
        this.dayFrom = dayFrom;
        this.monthFrom = monthFrom + 1;
        this.dayTo = dayTo;
        this.monthTo = monthTo + 1;
    }

    public static ZodiacSign get(int day, int month) {
        for (ZodiacSign sign : values())
            if (month == sign.monthFrom && day >= sign.dayFrom
                    || month == sign.monthTo && day <= sign.dayTo)
                return sign;

        throw new RuntimeException("Cannot select ZodiacSign");
    }
}
publicstaticvoidmain(字符串…参数){
int day=Integer.parseInt(DD.getText());
int month=Integer.parseInt(MM.getText());
黄道星座黄道星座=黄道星座.get(天,月);
JLabel jLabel1=新的JLabel(zodiacSign.name());
System.out.println(jLabel1.getText());
}
公羊星座{
白羊座(21,日历3月,20,日历4月),
金牛座(21,日历,4月,21,日历,5月),
双子座(22,日历5月,21,日历6月),
巨蟹座(22,日历6月22日,日历7月22日),
狮子座(日历21.7月21日,日历8月21日),
处女座(22,日历,8月,23,日历,9月),
天秤座(24,日历9月23日,日历10月),
天蝎座(24,日历,10月,22,日历,11月),
射手座(23,日历11月22日,日历12月),
摩羯座(23,日历,12月,20,日历,1月),
水瓶座(21,日历,1月,19,日历,2月),
双鱼座(20,日历。2月,20,日历。3月);
私人最终int日起;
私人终审法院;
非公开的最后一个月;
蒙托私人决赛;
黄道带(整数日起,整数月起,整数日至,整数月至){
this.dayFrom=dayFrom;
this.monthFrom=monthFrom+1;
this.dayTo=dayTo;
this.monthTo=monthTo+1;
}
公共静态星座get(整数日,整数月){
对于(生肖:值())
如果(月==sign.monthFrom&&day>=sign.dayFrom

||month==sign.monthTo&&day错误在于几乎总是执行最后一个else。 使用if-then-else-if链来生成独占案例

    String sign;
    if (month == 12 && day <= 23 || month == 1 && day <= 20) {
        sign = "Capricorn";
    } else if (month == 1 && day >= 21 || month == 2 && day <= 18) {
         sign = "Aquarius";
    } else if (month == 2 && day >= 19 || month == 3 && day <=20) {
         sign = "Pisces";
    } else if (month == 3 && day >= 21 || month == 4 && day <=20) {
         sign = "Aries";
    } else if (month == 4 && day >= 21 || month == 5 && day <= 21) {
         sign = "Taurus";
    } else if (month == 5 && day >= 22 || month == 6 && day <= 21) {
         sign = "Gemini";
    } else if (month == 6 && day >= 22 || month == 7 &&  day <= 23) {
        sign = "Cancer";
    } else if (month == 7 && day >= 24 || month == 8 && day <= 23) {
         sign = "Leo";
    } else if (month == 8 && day >= 24 || month == 9 && day <=23) {
         sign = "Virgo";
    } else if (month == 9 && day >= 24 || month == 10 && day <=23) {
         sign = "Libra";
    } else if (month == 10 && day >= 24 || month == 11 && day <=22) {
         sign = "Scorpio";
    } else if (month == 10 && day >= 23 || month == 11 && day <=22) {
         sign = "Sagittarius";
    } else {
         sign = "Capricorn";
    }
    jLabel1.setText(sign);
字符串符号;
如果(月==12&&d考虑:

  • 黄道十二宫具有范围-使每个范围都像一个带有开始日期的步骤
  • 通过这些步骤-我发现从上限到下限更容易。如果你没有通过某个步骤的“日期”,你就在这一步的范围内
希望这能说明问题

enum ZodiacSign { Aquarius, Pisces, Aries, Taurus, Gemini, Cancer, Leo, Virgo, Libra, Scorpio, Sagittarius, Capricorn }

public String GetZodiacSign(int month, int day)
{
    Map<Integer,ZodiacSign>m = new LinkedHashMap<Integer,ZodiacSign>();

    m.put(1222,ZodiacSign.Capricorn);
    m.put(1122,ZodiacSign.Sagittarius);
    m.put(1023,ZodiacSign.Scorpio);
    m.put(923 ,ZodiacSign.Libra);
    m.put(823 ,ZodiacSign.Virgo);
    m.put(723 ,ZodiacSign.Leo); 
    m.put(621 ,ZodiacSign.Cancer);
    m.put(520 ,ZodiacSign.Gemini);
    m.put(420 ,ZodiacSign.Taurus);
    m.put(321 ,ZodiacSign.Aries);
    m.put(219 ,ZodiacSign.Pisces);
    m.put(120 ,ZodiacSign.Aquarius);
    m.put(101 ,ZodiacSign.Capricorn); // loop back

    int position = month * 100 + day;

    for (Map.Entry<Integer, ZodiacSign> entry : m.entrySet())
    {
        if (position > entry.getKey()) { return entry.getValue().toString(); }
    }
}
enum黄道星座{水瓶座、双鱼座、白羊座、金牛座、双子座、巨蟹座、狮子座、处女座、天秤座、天蝎座、射手座、摩羯座}
公共字符串GetZodiacSign(整数月,整数日)
{
Mapm=新LinkedHashMap();
m、 普特(1222,黄道十二宫,摩羯座);
m、 put(1122,黄道十二宫,人马座);
m、 put(1023,黄道十二宫,天蝎座);
m、 put(923,星座天秤座);
m、 put(823,黄道十二宫,处女座);
m、 put(723,黄道十二宫,狮子座);
m、 put(621,黄道十二宫,巨蟹座);
m、 put(520,黄道十二宫,双子座);
m、 put(420,黄道十二宫,金牛座);
m、 put(321,黄道十二宫,白羊座);
m、 put(219,双鱼星座);
m、 放置(120,黄道十二宫,宝瓶座);
m、 放(101,星座。摩羯座);//回圈
int位置=月*100+天;
对于(Map.Entry:m.entrySet())
{
if(position>entry.getKey()){return entry.getValue().toString();}
}
}

代码的作用是什么?你期望发生什么?提示:你的
if
块看起来很奇怪;你可能想要一个
if
和多个
否则if
块,而不是经常启动一个新的
if
。在调试器中逐步浏览程序,你就会明白我的意思。你能显示更多的代码吗?jLabel I在哪里首先,我也不会让每一个例子都成为一个新的if语句欢迎使用stack overflow,为了获得更好的帮助,请阅读我希望如果我的输入是day=6和month=10,它会显示星座libra,但现在我得到了摩羯座作为输出建议:1)将你的星座符号放入字符串数组:`string[]zodiac={“Cancer”,2)编写一个简单的表达式,从中计算索引(0,1,2,…,11),3)使用索引值获取jLabel1对象的生肖文本。您的代码应该缩减大约30行;)
enum ZodiacSign { Aquarius, Pisces, Aries, Taurus, Gemini, Cancer, Leo, Virgo, Libra, Scorpio, Sagittarius, Capricorn }

public String GetZodiacSign(int month, int day)
{
    Map<Integer,ZodiacSign>m = new LinkedHashMap<Integer,ZodiacSign>();

    m.put(1222,ZodiacSign.Capricorn);
    m.put(1122,ZodiacSign.Sagittarius);
    m.put(1023,ZodiacSign.Scorpio);
    m.put(923 ,ZodiacSign.Libra);
    m.put(823 ,ZodiacSign.Virgo);
    m.put(723 ,ZodiacSign.Leo); 
    m.put(621 ,ZodiacSign.Cancer);
    m.put(520 ,ZodiacSign.Gemini);
    m.put(420 ,ZodiacSign.Taurus);
    m.put(321 ,ZodiacSign.Aries);
    m.put(219 ,ZodiacSign.Pisces);
    m.put(120 ,ZodiacSign.Aquarius);
    m.put(101 ,ZodiacSign.Capricorn); // loop back

    int position = month * 100 + day;

    for (Map.Entry<Integer, ZodiacSign> entry : m.entrySet())
    {
        if (position > entry.getKey()) { return entry.getValue().toString(); }
    }
}