2013-04-04 136 views
1

我一直在负责为一疗程我做创造一个小型的Java程序,以及我在与下面的代码块中的一些问题:if语句逻辑

 System.out.println("Please enter your first name:"); 
    userName = sc.nextLine(); 
    System.out.println("What year were you born in?"); 
    birthYear = sc.nextInt(); 
    System.out.println("In the 'dd.mm' format, what are the day and month of your birth?"); 
    dayMonth = sc.nextDouble(); 
    //Cast the user input of type double to an int for the day of Birth 
    dayOfBirth = dayMonth.intValue(); 

    //Cast the double value for month and cast it to an int 
    dayMonth = dayMonth - dayOfBirth; 
    dayMonth = dayMonth * 100; 
    dayMonth = Math.rint(dayMonth); 
    monthOfBirth = dayMonth.intValue(); 
if(birthYear == 2013 || birthYear == 2001 || birthYear == 1989 || birthYear == 1977 || birthYear == 1965 || birthYear == 1953 || birthYear == 1941) 
{ 
    if(monthOfBirth == 9 || monthOfBirth == 10 || monthOfBirth == 11) 
    { 
     System.out.println(userName + " was born during Spring on " + monthOfBirthName + " " + dayOfBirth + " in Snake year " + birthYear); 
    } 
     else if(monthOfBirth != 9 || monthOfBirth != 10 || monthOfBirth != 11) 
     { 
      System.out.println(userName + " was born on " + monthOfBirthName + " " + dayOfBirth + " in Snake year " + birthYear); 
     } 
} 
if(birthYear != 2013 || birthYear != 2001 || birthYear != 1989 || birthYear != 1977 || birthYear != 1965 || birthYear != 1953 || birthYear != 1941) 
{ 
    if(monthOfBirth == 9 || monthOfBirth == 10 || monthOfBirth == 11) 
    { 
     System.out.println(userName + " was born during Spring on " + monthOfBirthName + " " + dayOfBirth + " " + birthYear); 
    } 
     else if(monthOfBirth != 9 || monthOfBirth != 10 || monthOfBirth != 11) 
     { 
      System.out.println(userName + " was born on " + monthOfBirthName + " " + dayOfBirth + " " + birthYear); 
     } 
} 

但是我的输出是现身如下:

Please enter your first name: 

Samuel 

What year were you born in? 

1977 

In the 'dd.mm' format, what are the day and month of your birth? 

09.09 

Samuel was born during Spring on September 9 in Snake year 1977 

Samuel was born during Spring on September 9 

我显然不希望重复输出,但是我无法看到凡在我if语句导致它被重复的逻辑。

任何帮助将不胜感激。

谢谢大家,

〜山姆。

+0

Hi @Sam。你和我的兄弟有完全一样的名字!不要把这当成侮辱,而是建设性的批评。你需要更好地格式化你的代码。看看一个真正的风格:http://en.wikipedia.org/wiki/Indent_style#Variant:_1TBS。另外如果你使用eclipse,你可以使用'CTRL-SHIFT-F'来自动格式化。它可以节省很多时间!很多编辑可以为你自动格式化。看看它,兄弟! ;) – Jess 2013-04-04 14:00:12

回答

1

而不是单独使用2 if,使它们分别为if-elseif-else if

if(birthYear == 2013 || birthYear == 2001 || birthYear == 1989 || birthYear == 1977 || birthYear == 1965 || birthYear == 1953 || birthYear == 1941){ 
    .... 
} 
else if(birthYear != 2013 || birthYear != 2001 ||...){ 
.... 
} 

因为,如果你给一个if-if,无论是if语句将被执行,而如果你给一个if-else if,第二else if将仅在第一if语句失败执行。

+0

第二个'sysout'是第二个'if'被执行的结果,即使执行了'if'。因此,答案。 OP希望避免打印第二个“if”。 – SudoRahul 2013-04-04 10:58:45

+1

根据我的回答,'else if'可以替换为'else'。如果'birthYear'不是龙的一年,那么它不是。无需再次检查所有年份。不要重复自己。 – AlexanderBrevig 2013-04-04 11:01:19

+0

@AlexanderBrevig - 我已经在我的答案的第一行中提到过了。但是你不能认为OP在第二个'if'停下来。如果他以后有'龙年'和'不是龙年',该怎么办? – SudoRahul 2013-04-04 11:03:51

0

使用else语句如有可能,所以如果你测试2013,2001年... 刚过,作出else语句

0

此时应更换第二,如果这里的一切!=用一个简单的“其他”因为你已经检查过这些陈述是否属实。因此,简单地写else就会在逻辑上相等并且更具可读性。

if(birthYear == 2013 || birthYear == 2001 || birthYear == 1989 || birthYear == 1977 || birthYear == 1965 || birthYear == 1953 || birthYear == 1941){ 
    .... 
} 
else { //not snake year 
    .... 
} 
0

问题是与

if(birthYear != 2013 || birthYear != 2001 || birthYear != 1989 || birthYear != 1977 || birthYear != 1965 || birthYear != 1953 || birthYear != 1941 

如果你仔细看,我们正在确保表达总是导致尝试。只有一个人可以一次最多假,其他人都会是真的,因此最终总是如此(困惑?)。说出生年份是2013年,这使得第一个条件(生日年!= 2013)为假,但所有其他条件都是真实的。以任何其他的例子,你会看到我想说的。

其实一个小修改会为您修复代码。你已经检查过if (birthyear is in given years),没有任何条件的一个简单的东西会为你工作。

if(birthYear == 2013 || birthYear == 2001 || birthYear == 1989 || birthYear == 1977 || birthYear == 1965 || birthYear == 1953 || birthYear == 1941) 
{ 
    if(monthOfBirth == 9 || monthOfBirth == 10 || monthOfBirth == 11) 
    { 
     System.out.println(userName + " was born during Spring on " + monthOfBirthName + " " + dayOfBirth + " in Snake year " + birthYear); 
    } 
     else// NO CHECK REQUIRED NOW 
     { 
      System.out.println(userName + " was born on " + monthOfBirthName + " " + dayOfBirth + " in Snake year " + birthYear); 
     } 
} 
//SEE THIS 
else{ 
    if(monthOfBirth == 9 || monthOfBirth == 10 || monthOfBirth == 11) 
    { 
     System.out.println(userName + " was born during Spring on " + monthOfBirthName + " " + dayOfBirth + " " + birthYear); 
    } 
//AND 
     else 
     { 
      System.out.println(userName + " was born on " + monthOfBirthName + " " + dayOfBirth + " " + birthYear); 
     } 
} 
0

如果一部分是错误的。第二:

if(birthYear != 2013 || birthYear != 2001 || ....) 

,因为它常是真实的。 只需检查一个视图示例: 如果您有2012年,它不2013年,所以你的表达式成为现实。 如果你采取2013年,那么第一部分将变成错误的,但是当你评估2013!= 2001时,它会再次变为真实。

你可能希望有什么是

if(birthYear == 2013 || birthYear == 2001 || birthYear == 1989 || birthYear == 1977 || birthYear == 1965 || birthYear == 1953 || birthYear == 1941) 
{ 
..... 
} 
else { 
..... 
} 

顺便说一句:如果你想否定式(X = = ||一个== X ||乙== X C)则逻辑否定是(x!= A & & x!= B & & x!= C)。

1

您可以选择以下解决方案之一:使用& &操盘手)

1 ||在第二个if语句

2)如果(){}其他{} //卡迈勒的解决方案

0

答案就在你的条件。

承担dob = 1

if(dob == 1 || dob == 2 || dob == 3 ...) 

将评估为true,因为DOB == 1

if (dob != 1 || dob != 2 || dob != 3 ...) 

也将评估为true,因为DOB!= 2

要使用什么是AND/&&而不是OR/||

1

更好地使用集合而不是多个if(... == .. || ... = = || ...)

像这样:

List<String> wrongYears = Arrays.asList("2013", "2001", "1989", "1977", ...); 

,并检查:

if(wrongYears.contains(birthYear) 
{ 
... 
} 

和几个月的数字相同

你的逻辑错误会很明显