2013-04-17 3 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 * побитовое или * здесь не полезно - в частности, потому что * 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-летняя структура» может обрабатываться с использованием простого модуля от разницы до известного года змеи.

0

В коде есть две основные проблемы.

Одним из них является то, что вы пытаетесь поразрядно или целыми целыми числами, а затем рассматриваете его так, как будто он будет проверять их все для вас. К сожалению, java не сделает этого для вас, поэтому вам нужно сделать оператор модуля, если вы хотите увидеть, является ли год рождения годом змеи. Это может быть достигнуто с помощью этой строки:

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

вместо

if (birthYear == SNAKE_YEAR) 

Ваш другой главный вопрос заключается в том, что когда вы проверяете, если snakeYearBool является ложным или истинным, вы использовали один = вместо 2 =, поэтому независимо от того, что он всегда будет возвращать true, потому что вы инициализируете snakeYearBool true во втором if-выражении. Поэтому измените эти строки на это:

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

И это должно исправить ваши проблемы. Удачи!

+0

спасибо, ребята, что список номеров получил немного из-под контроля, модуль сделал трюк – Steahan

+0

@Steahan Нет проблем, не забудьте принять ответы на вопросы, если кто-то даст вам ответ, который работает, хотя –

+0

Упс спасибо помощнику. – Steahan

Смежные вопросы