2013-04-17 42 views
2

我的問題是我試圖使一個消息聲明爲一個字符串顯示取決於它是否爲真或假。該字符串不返回正確的值是:snakeYearMsg爲什麼我的字符串不能激活?

我一直在試圖使這個字符串返回所需的值整天無濟於事。最後,我通過列出SNAKE_YEAR的所有可能的可用性,嘗試了一種暴力方法。

該程序讓用戶輸入數據,然後根據輸入計算它們的「Essscore」。我的問題是,最後一次向用戶輸出的數據始終顯示用戶出生在「蛇年」(一年中的蛇,在中國的生肖),即使他們不是。

這個程序對,我已經忘記了,它越來越periously接近到期日的任務,所以任何幫助將不勝感激

的代碼是在這裏:

/*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(); 
} 

}

+1

查看'|'運算符。 A * bitwise或*在這裏沒有用處 - 特別是因爲* none *的用法看起來是相互排斥的位域。 (請參閱'ArrayList。包含「,但更好的是,使用確定性公式,如果可以應用 - 即年數*總是*爲12的週期?如果不是,幾個例外可以單獨處理嗎?) – user2246674

+0

可能重複[字符串比較在Java中,再次](http://stackoverflow.com/questions/8702986/string-comparison-in-java-again)哦CRAP!糟糕的近距離投票 - 這與字符串比較無關!我的歉意 –

+0

對不起剛剛解決了我自己的問題,我錯過了一些額外的「=」符號「snakeYearBool」 – Steahan

回答

1

雖然我不會說這是唯一的問題,一個關鍵的問題是,在嘗試使用bitwise-or編碼年(或數月)是錯誤的

這是因爲int SNAKE_YEAR = x | y | z ..結果,其中被稱爲SNAKE_YEAR一個單個整數值。由於組件(所有年份)都有重疊的比特序列,因此會導致信息丟失。但是,即使沒有信息丟失,當使用簡單的==時(例如SNAKE_YEAR == 2001結果爲假時,這應該是真的),這也會導致錯誤的結果。

相反,使用列表(或一組)和contains或,更好創建一個使用分立式的方法(即bool isYearOfSnake(int year))。我會猜測,「循環12年結構」可以使用一個簡單的模數從一個已知的Snake年份的差異來處理。

0

您的代碼有兩個主要問題。

一個是你正在嘗試按位或一大堆整數,然後把它看作是將它們全部檢查出來。不幸的是,java不會爲你做這件事,所以當你想知道出生年份是蛇年時,你需要做一個模數運算符。這可以通過使用此行來實現:

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

代替

if (birthYear == SNAKE_YEAR) 

你的另一個主要問題是,當你檢查,看看是否snakeYearBool是假的或真實的,你用的單=代替2 =,所以不管它總是返回true,因爲你在第二個if語句中將snakeYearBool初始化爲true。因此,將這些行更改爲:

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

而且應該解決您的問題。祝你好運!

+0

感謝球員,數字列表變得有點失控,模數巧妙地 – Steahan

+0

@Steahan沒問題,記得接受問題的答案,如果有人給你一個答案雖然 –

+0

哎呦,感謝隊友。 – Steahan

相關問題