2014-02-06 151 views
-3
import java.util.Scanner; 

public class youalwaystwo 
{ 
    public static void main(String[] args) 
    { 
    String sentence; 
    Scanner keyboard = new Scanner(System.in); 
    System.out.println("Please enter a sentence."); 
    sentence = keyboard.nextLine(); 
    { 
    if (sentence.charAt(sentence.length()-1) == '?') if (sentence.length() %2 == 0) 
      System.out.println("Yes."); 
     else if (sentence.charAt(sentence.length()-1) == '?') if (sentence.length() %1 == 0) 
      System.out.println("No."); 
     else if (sentence.charAt(sentence.length()-1) == '!') 
      System.out.println("Wow."); 
     else 
      System.out.println("You always say \"" + sentence + "\"."); 
    } 
    } 
} 

问题是当我输入一个句子没有?要么 !没有打印。我的其他语句在其他树如果没有打印

+1

请注意,如果在一行中有两个“if”,并且没有括号,那么'else'将始终是最后一个if的else。也许这是问题所在。尝试修复缩进和/或添加括号以查看“if-else-tree”的真实结构。另外,尝试在第一个if条件中用'&&'替换同一行中的第二个'if'。 –

+3

你应该更好地缩进你的代码。并且尊重代码约定。例如类名始终是首字母大写。 – Carlo

+1

那是那里的逻辑混乱之一。 –

回答

4

我已经格式化您的代码,增加了支架,现在应该是相当明显发生了什么:

public static void main(String[] args) { 
    String sentence; 
    Scanner keyboard = new Scanner(System.in); 
    System.out.println("Please enter a sentence."); 
    sentence = keyboard.nextLine(); 
    if (sentence.charAt(sentence.length() - 1) == '?') { 
     if (sentence.length() % 2 == 0) { 
      System.out.println("Yes."); 
     } else if (sentence.charAt(sentence.length() - 1) == '?') { 
      if (sentence.length() % 1 == 0) { 
       System.out.println("No."); 
      } else if (sentence.charAt(sentence.length() - 1) == '!') { 
       System.out.println("Wow."); 
      } else { 
       System.out.println("You always say \"" + sentence + "\"."); 
      } 
     } 
    } 
} 

即你有一个很大的if,在结束了?检查 - 如果没有没有任何反应。

一个教训,带走这个; 总是使用{}(当你了解Java稍微好一些时,这条规则也有例外,但现在总是)。

+0

为每个'if'和'else'块添加括号是正确的做法,但最后一个'else'的位置总是有争议的。 – SudoRahul

+0

@Ɍ.Ɉ - 这是我的IDE建议的,所以现在编译器会评估它... –

+0

正是我的观点。对你来说,我和IDE似乎是正确的,但OP可能有不同的逻辑。这就是为什么我说这是有争议的:)但你的答案使用括号是正确的! – SudoRahul

1

你有一个糟糕的缩进if陈述,所以很难看到会发生什么。让我们正确缩进它并添加{},以清楚说明代码的结构。

if (sentence.charAt(sentence.length()-1) == '?') { 
    if (sentence.length() %2 == 0) { 
     System.out.println("Yes."); 
    } 
    else if (sentence.charAt(sentence.length()-1) == '?') { 
     if (sentence.length() %1 == 0) { 
      System.out.println("No."); 
     } 
     else if (sentence.charAt(sentence.length()-1) == '!') { 
      System.out.println("Wow."); 
     } 
     else { 
      System.out.println("You always say \"" + sentence + "\"."); 
     } 
    } 
} 

现在你看看这句话没有?末会发生什么:第一个if的表达式会false一切将被跳过。

0

我觉得你if语句应该是这样的:

if (sentence.charAt(sentence.length() - 1) == '?') {///// for ? 
    if (sentence.length() % 2 == 0) { 
     System.out.println("Yes."); 
     } else if (sentence.length() % 1 == 0) { 
      System.out.println("No."); 
     } 
    } else if (sentence.charAt(sentence.length() - 1) == '!') {/// for ! 
      System.out.println("Wow."); 
    } else { 
      System.out.println("You always say \"" + sentence + "\".");/// for anything else without ? or ! 
    } 
+0

这种格式比OP的好... –

0

变化

if (sentence.charAt(sentence.length()-1) == '?') if (sentence.length() %2 == 0) 
    System.out.println("Yes."); 
else if (sentence.charAt(sentence.length()-1) == '?') if (sentence.length() %1 == 0) 

if (sentence.charAt(sentence.length()-1) == '?' && sentence.length() %2 == 0) 
    System.out.println("Yes."); 
else if (sentence.charAt(sentence.length()-1) == '?' && sentence.length() %1 == 0) 
0

我认为实际的问题已经造成非常混乱的布局的if语句阶梯。

只需对代码进行格式化即可避免此类问题。许多最近的Java编辑器都具有可以自动执行此操作的“格式源”功能。我相信它是正确对齐的,很容易看到任何问题。使用的确切编码风格在这里并不重要,只需使用任何。