2

我的问题是我试图根据它是真还是假来使声明为字符串的消息显示。未返回正确值的字符串是:snakeYearMsg

我一直试图让这个字符串整天返回所需的值,但无济于事。最后,我尝试了一种蛮力方法,列出了 SNAKE_YEAR 的所有可能可用性。

该程序允许用户输入数据,然后根据该输入为他们计算“Essscore”。我的问题是,最后向用户输出的数据始终显示用户出生在“蛇年”(蛇年,在中国十二生肖中),即使他们不是。

该计划是针对我忘记的作业,并且非常接近截止日期,因此将不胜感激

代码在这里:

/*Program designed by Some guy
*for KXT101 Assignment Number One*/


 import java.util.Scanner;
 public class AssigOne113

{
public static void main (String[] args)   
{
        final int CURRENT_YEAR = 2013;
        final int CALENDER_ROTATION = 12;
        final int SNAKE_YEAR = CURRENT_YEAR | 2001 | 1989 | 1977 | 1965 | 1953 | 1941 | 1929 | 1917 | 1905 | 1893 | 1881 | 1869 |
                                1857 | 1845 | 1833 | 1821 | 1809 | 1797 | 1785 | 1773 | 1761 | 1749 | 1737 | 1725 | 1713 | 1701 |
                                1689 | 1677 | 1665 | 1653 | 1641 | 1629 | 1617 | 1605 | 1593 | 1581 | 1569 | 1557 | 1545 | 1533 |
                                1521 | 1509 | 1497 | 1485 | 1473 | 1461 | 1449 | 1437 | 1425 | 1413 | 1401 | 1389 | 1377 | 1365 |
                                1353 | 1341 | 1329 | 1317 | 1305 | 1293 | 1281 | 1269 | 1257 | 1245 | 1233 | 1221 | 1209 | 1197 |
                                1185 | 1173 | 1161 | 1149 | 1137 | 1125 | 1113 | 1101 | 1089 | 1077 | 1065 | 1053 | 1041 | 1029 |
                                1017 | 1005 | 993  | 981  | 969  | 957  | 945  | 933  | 921  | 909  | 897  | 885  | 873  | 861  |
                                849  | 837  | 825  | 813  | 801  | 789  | 777  | 765  | 753  | 741  | 729  | 717  | 705  | 693  |
                                681  | 669  | 657  | 645  | 633  | 621  | 609  | 597  | 585  | 573  | 561  | 549  | 537  | 525  |
                                513  | 501  | 489  | 477  | 465  | 453  | 441  | 429  | 417  | 405  | 393  | 381  | 369  | 357  |
                                345  | 333  | 321  | 309  | 297  | 285  | 273  | 261  | 249  | 237  | 225  | 213  | 201  | 189  |
                                177  | 165  | 153  | 141  | 129  | 117  | 105  | 93   | 81   | 69   | 57   | 45   | 33   | 21   |
                                9;
        final int SUMMER_MONTH_JAN = 1;
        final int SUMMER_MONTH_FEB = 2;
        final int SUMMER_MONTH_DEC = 12;
        final int AUTUMN_MONTH_MAR = 3;
        final int AUTUMN_MONTH_APR = 4;
        final int AUTUMN_MONTH_MAY = 5;                         
        final int WINTER_MONTH_JUN = 6;
        final int WINTER_MONTH_JUL = 7;
        final int WINTER_MONTH_AUG = 8;                     
        final int SPRING_MONTH_SEP = 9;
        final int SPRING_MONTH_OCT = 10;
        final int SPRING_MONTH_NOV = 11;
        final int SIXTH_DAY = 06;
        final int SEVENTH_DAY = 07;
        final int JANUARY = 1;
        final int FEBUARY = 2;
        final int MARCH = 3;
        final int APRIL = 4;
        final int MAY = 5;
        final int JUNE = 6;
        final int JULY = 7;
        final int AUGUST = 8;
        final int SEPTEMBER = 9;
        final int OCTOBER = 10;
        final int NOVEMBER = 11;
        final int DECEMBER = 12;
        final int CALENDER_MAX = 12;

        Scanner sc;

        String essscorecalculate;
        String essscorerepeat;
        String userName;
        int birthYear;
        String junk;

        int yob;
        int day;
        int month = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
        int essscore = 0;
        String summer = "Summer";
        String autumn = "Autumn";
        String winter = "Winter";
        String spring = "Spring";
        String seasonBorn = "any season";
        String monthBorn = "any month";
        String snakeYearMsg = "the year";

        boolean snakeYearBool;
        boolean haveS;

        double birthDay;

        char initial;

        //program begins

        System.out.println(" ");
        System.out.println("<------------------------------------------->");
        System.out.println("Sammy Snakes Sixth/Seventh Spring Of Success");
        System.out.println("<------------------------------------------->");
        System.out.println(" ");

        System.out.println("<------------------------------------------->");
        System.out.println("    I can calculate an Ess-Score for you     ");    
        System.out.println("   Would you like to calculate an Ess-Score? ");
        System.out.println("<------------------------------------------->");
        sc = new Scanner(System.in);
        essscorecalculate = sc.nextLine();
        {
            /*essscore.Reset;*/
            {

            }
        }
        System.out.println("<------------------------------------------->");
        System.out.println("         To begin, what is your name?        ");
        System.out.println("<------------------------------------------->");
        userName = sc.nextLine();
        initial =(userName.charAt(0));
        {
            if (initial == 'S')
                essscore =+ 4;
            if (initial == 's')
                essscore =+ 4;                  

        }
        System.out.println("<----------------------------------------------------------------->");
        System.out.println("  What year were you born? (Please enter in following format XXXX) ");
        System.out.println("<----------------------------------------------------------------->");
        birthYear = sc.nextInt();
        junk = sc.nextLine();
        {
            {
                if (birthYear == SNAKE_YEAR)
                    snakeYearBool = true;
                /*  essscore =+ 16; */      
                else if (birthYear != SNAKE_YEAR)
                    snakeYearBool = false;
            }
                {
                    if (snakeYearBool = false)
                        snakeYearMsg = "A non Snake year";
                    if (snakeYearBool = true)
                        snakeYearMsg = "Snake year";

                if (birthYear != SNAKE_YEAR)
                    essscore ++;            
                }
            }
        System.out.println("<--------------------------------------------------------------------->");
        System.out.println("Please enter your birthday (please enter in the following format DD.MM)");
        System.out.println("<--------------------------------------------------------------------->");
        birthDay = sc.nextDouble();
        junk = sc.nextLine();

            {
                {
                    day = (int)birthDay;
                        if (day == SIXTH_DAY)
                            essscore =+ 8;
                        if (day == SEVENTH_DAY)
                            essscore =+ 8;
                }
                {
                    month = ((int)Math.round(100*birthDay))%100;
                        /*System.out.print(month);*/
                }

                    {
                        if (month == 1)
                            monthBorn = "January";
                        if (month == 2)
                            monthBorn = "Febuary";
                        if (month == 3)
                            monthBorn = "March";
                        if (month == 4)
                            monthBorn = "April";
                        if (month == 5)
                            monthBorn = "May";                      
                        if (month == 6)
                            monthBorn = "June";                     
                        if (month == 7)
                            monthBorn = "July";                     
                        if (month == 8)
                            monthBorn = "August";                       
                        if (month == 9)
                            monthBorn = "September";                        
                        if (month == 10)
                            monthBorn = "October";                      
                        if (month == 11)
                            monthBorn = "November";                     
                        if (month == 12)
                            monthBorn = "December";                     
                    }

                {
                    if (month == SPRING_MONTH_SEP)
                        essscore =+2;
                    if (month == SPRING_MONTH_OCT)
                        essscore =+2;
                    if (month == SPRING_MONTH_NOV)
                        essscore =+2;                                                                       
                    {

                    if (month == SPRING_MONTH_SEP)                                                                                                                  
                        seasonBorn = "Spring";
                    else if (month == SPRING_MONTH_OCT)                                                                                                                 
                        seasonBorn = "Spring";
                    else if (month == SPRING_MONTH_NOV)                                                                                                                 
                        seasonBorn = "Spring";                      
                    else if (month ==AUTUMN_MONTH_MAR)
                        seasonBorn = "Autumn";
                    else if (month ==AUTUMN_MONTH_APR)
                        seasonBorn = "Autumn";
                    else if (month ==AUTUMN_MONTH_MAY)
                        seasonBorn = "Autumn";                          
                    else if (month == WINTER_MONTH_JUN)
                        seasonBorn = "Winter";
                    else if (month == WINTER_MONTH_JUL)
                        seasonBorn = "Winter";
                    else if (month == WINTER_MONTH_AUG)
                        seasonBorn = "Winter";                                                      
                    else if (month == SUMMER_MONTH_JAN)
                        seasonBorn = "Summer";
                    else if (month == SUMMER_MONTH_FEB)
                        seasonBorn = "Summer";
                    else if (month == SUMMER_MONTH_DEC)
                        seasonBorn = "Summer";                          
                    }
                }       
            }
        System.out.println("<------------------------------------------------>");   
        System.out.println(""+userName+" was born in "+seasonBorn+" on "+monthBorn+" "+day+" in "+snakeYearMsg+" "+birthYear+" ");
        System.out.println(""+essscore+""); 
        System.out.println("<------------------------------------------------>");

        System.out.println("<------------------------------------------------>");
        System.out.println("  Would you like to calculate another Ess-Score?  ");
        System.out.println("<------------------------------------------------>");
        essscorerepeat = sc.next();
}   

}

4

2 回答 2

1

虽然我不会说这是唯一的问题,但一个关键问题是使用按位或尝试对年(和月)进行编码是错误的

这是因为int SNAKE_YEAR = x | y | z ..会产生一个数值,称为SNAKE_YEAR. 因为组件(所有年份)具有重叠的位序列,这会导致信息丢失。然而,即使没有丢失信息,这在使用简单时也会导致不正确的结果==(例如SNAKE_YEAR == 2001,当它应该为真时结果为假)。

相反,使用列表(或集合),contains 或者,更好地创建使用离散公式(即bool isYearOfSnake(int year))的方法。我猜想“循环 12 年结构”可以使用一个简单的模数来处理,从一个已知的蛇年的差异......

于 2013-04-17T05:54:29.667 回答
0

您的代码中有两个主要问题。

一种是您尝试按位或一大堆整数,然后将其视为会为您检查所有整数。不幸的是,java 不会为您执行此操作,因此当您想查看出生年份是否为蛇年时,您需要使用模运算符。这可以通过使用这条线来实现:

if (((birthYear - 9) %12) == 0)

代替

 if (birthYear == SNAKE_YEAR)

您的另一个主要问题是,当您检查snakeYearBool 是false 还是true 时,您使用了单个= 而不是2 =,所以无论它总是返回true,因为您在第二个if 语句中将snakeYearBool 初始化为true。因此,将这些行更改为:

if (snakeYearBool == false)
                    snakeYearMsg = "A non Snake year";
if (snakeYearBool == true)
                    snakeYearMsg = "Snake year";

这应该可以解决您的问题。祝你好运!

于 2013-04-17T05:59:54.663 回答