【问题标题】:Why won't my String activate?为什么我的字符串不会激活?
【发布时间】:2013-04-17 13:59:54
【问题描述】:

我的问题是我试图将声明为字符串的消息显示为取决于它是真还是假。未返回正确值的字符串是: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();
}   

}

【问题讨论】:

  • 查找| 运算符。 bitwise or 在这里没有用 - 特别是因为 none 的用法似乎是互斥的位域。 (请参阅ArrayList.contains,但更好的是,使用确定性公式,如果可以应用 - 即年份总是以 12 为周期?如果不是,可以单独处理少数例外情况吗?)
  • String comparison in java, again 的可能副本哦,废话!糟糕的关闭投票 - 这与字符串比较无关!我的道歉
  • 抱歉刚刚解决了我自己的问题,我为“snakeYearBool”缺少了几个额外的“=”符号
  • @user2246674 是正确的。如果你想表示一个整数范围,要么你需要一个它们的数组,一个不同的数据结构,如 hashmap 或 arraylist,或者一个函数,如果提供的整数是范围的一部分,则返回。

标签: java string jcreator


【解决方案1】:

虽然我不会说这是唯一的问题,但一个关键问题是使用bitwise-or 来尝试编码年(和月)是错误的.

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

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

【讨论】:

    【解决方案2】:

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

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

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

    而不是

     if (birthYear == SNAKE_YEAR)
    

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

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

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

    【讨论】:

    • 感谢数字列表有点失控,模数起到了作用
    • @Steahan 没问题,如果有人给你一个有效的答案,记得接受问题的答案
    猜你喜欢
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 2017-02-25
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多