我的问题是我正在尝试将消息声明为字符串显示,具体取决于它是真还是假。不返回正确值的String是:snakeYearMsg
我一直试图让这个String整天返回所需的值,但无济于事。最后,我通过列出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();
}
}
答案 0 :(得分:1)
虽然我不会说这只是唯一的问题,但一个关键问题是使用bitwise-or来尝试编码年(和月)是错误的< /强>
这是因为int SNAKE_YEAR = x | y | z ..
会产生一个单整数值,称为SNAKE_YEAR
。由于组件(所有年份)具有重叠的比特序列,因此导致信息丢失。但是,即使没有丢失信息,当使用简单的==
时,这会导致错误的结果(例如,SNAKE_YEAR == 2001
会导致错误,如果它应该为真)。
相反,使用List(或Set)和contains
,或者更好创建一个使用离散公式的方法(即bool isYearOfSnake(int year)
)。我猜测“循环12年结构”可以使用从差异到已知Snake年的简单模数来处理。
答案 1 :(得分:0)
您的代码中存在两个主要问题。
一个是你正在尝试按位或整数个整数,然后对待它就好像它会为你检查它们一样。不幸的是,java不会为你做那些,所以当你想要看出生年是否是蛇年时,你需要做一个模数运算符。这可以通过使用以下行来实现:
if (((birthYear - 9) %12) == 0)
而不是
if (birthYear == SNAKE_YEAR)
你的另一个主要问题是当你检查snakeYearBool是假还是真时,你使用了一个=而不是2 =,所以不管它总是会返回true因为你在第二个时将snakeYearBool初始化为true如果声明。所以将这些行更改为:
if (snakeYearBool == false)
snakeYearMsg = "A non Snake year";
if (snakeYearBool == true)
snakeYearMsg = "Snake year";
这应该可以解决你的问题。祝你好运!