有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java程序不打印这两条消息

我这里有一些代码,我试图让用户输入一封信, 数字或符号,我让它们都工作,但当我输入一个字母时,它 输出“您已输入字母”和“您已输入字母” Symbol“但事实是,我从来没有输入过一个符号,只是一个符号 信下面是它的样子:

输入单个字符:

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) 个答案

  1. # 1 楼答案

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

    您使用了OR而不是AND,因此当您检查!Character.isDigit(letter)时,字母“D”将通过

    在最后一个if语句中,将| |改为&&

  2. # 2 楼答案

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

    回到您的示例,如果您键入“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!");
     }
    
  3. # 3 楼答案

    第二个if语句为true,因为!Character.isLetter(letter)为true。||是一个逻辑or。这意味着,如果其中一条语句为真,它将进入if子句

    所以只要把最后一个if换成else,你就没事了

  4. # 4 楼答案

    您的问题是最后一个if语句——让我们在这里逐步了解您的用例:

    您可以输入D

    isLetter('D')true所以它会打印

    isDigit('D')false所以不能打印

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

    ! true || ! false(评估方法调用),这与 false || true(评估!)与 true(评估||)以便打印

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

  5. # 5 楼答案

    再次罢工!那是你的罪魁祸首。你的案子需要&&