程序保持打印两个消息

时间:2017-10-12 22:03:41

标签: java if-statement numbers character

我在这里有一些代码,我试图让用户输入一封信,    数字或符号,我让它们全部工作,但当我输入一封信时,它    “你已经输入了一封信”和“你已经输入了一封信”    符号“但事情是,我从来没有输入过符号,只是一个    信件。继承人看起来如何:

输入单个字符:

d

你输入了一封信!

您输入了符号!

import static java.lang.System.*;
import java.util.*;

public class Java1304
{
    public static void main(String[] args)
  {
     new Problem();
  }
}

class Problem
{
    char letter;

    public Problem()
    {
        input();
        process();
        output();
    }

    void input()
    {
        Scanner scan = new Scanner(in);

        out.println("Enter a SINGLE character:");
        letter = scan.nextLine().charAt(0);
    }

    void process()
    {
        if(Character.isLetter(letter))
        {
            out.println("You entered a LETTER!");
        }
        if(Character.isDigit(letter))
        {
            out.println("You entered a NUMBER!");
        }
        if(!Character.isLetter(letter) || !Character.isDigit(letter))
      //else
            out.println("You entered a SYMBOL!");

    }

    void output()
    {
        out.println();
        out.println();
        out.println();

    }
}

5 个答案:

答案 0 :(得分:1)

您所希望的行为未反映在您编写的代码中。如果字符不是字母或不是数字,则语句!Character.isLetter(letter) || !Character.isDigit(letter)的计算结果为true(因为||是或的逻辑运算符)。

回到您的示例,如果您键入“A”,Character.isDigit(letter)的计算结果为false,那么!Character.isDigit(letter)的计算结果为true,因此!Character.isLetter(letter) || !Character.isDigit(letter)的计算结果为true。

根据您的示例,您的if块可以更好地编写为:

 if(Character.isLetter(letter)){
        out.println("You entered a LETTER!");
 } else if(Character.isDigit(letter)){
        out.println("You entered a NUMBER!");
 } else {
        out.println("You entered a SYMBOL!");
 }

答案 1 :(得分:1)

De Morgan's laws再次罢工! ||是你的罪魁祸首。对于您的案例,它必须是&&

答案 2 :(得分:0)

您的第二个if语句为true,因为!Character.isLetter(letter)为真。 ||是合乎逻辑的or。这意味着如果其中一个陈述为真,则输入if子句。

所以只需更改最后一个if for else,你应该没问题。

答案 3 :(得分:0)

你的问题是,如果声明让我们逐步完成你的用例:

您输入D

isLetter('D')true,因此会打印

isDigit('D')false,因此无法打印

!isLetter('D') && !isDigit('D')

相同

! true || ! false(评估方法调用)与...相同 false || true(评估!)与...相同 true(评估||)以便打印。

要解决此问题,您可以将||更改为&&,或者将您已注释掉的else条款放回原处。我个人认为else条款是一个更好的解决方案,因为它清楚地传达了你的想法,即不是字母而不是数字必须是符号,而不必明确检查每一个。

答案 4 :(得分:0)

if(!Character.isLetter(letter) || !Character.isDigit(letter))

您使用的是OR而不是AND,所以字母" D"将在您检查!Character.isDigit(letter)

时通过

在最后一个if语句中,更改||到&&

相关问题