Java 程序似乎绕过了一行代码

Java 程序似乎绕过了一行代码,java,string,boolean,Java,String,Boolean,我需要这个代码识别一个不是字母的字符。嗯,这还不是全部,但这就是我的问题所在。我认为我有正确的代码,它看起来很有效,但它也能识别字母。这是密码 import java.util.Scanner; public class AlphaPos { public static void main(String[] args) { java.util.Scanner input = new java.util.Scanner(System.in); System.out.

我需要这个代码识别一个不是字母的字符。嗯,这还不是全部,但这就是我的问题所在。我认为我有正确的代码,它看起来很有效,但它也能识别字母。这是密码

import java.util.Scanner;

 public class AlphaPos {
   public static void main(String[] args) {
     java.util.Scanner input = new java.util.Scanner(System.in);
      System.out.println(" Please enter an upper or lowercase letter. ");
           String letter = input.nextLine();
           String alpha = " abcdefghijklmnopqrstuvwxyz";
           String beta = " ABCDEFGHIJKLMNOPQRSTUVWXYZ";

         if ((letter != alpha) && (letter != beta));
              System.out.println(" You entered " +letter+ ", and you obviously can't follow directions."); 

        boolean hasUppercase = !letter.equals(letter.toLowerCase()); {
           if (hasUppercase) 
              System.out.println("Your letter is " +letter+ ", Uppercase, and its number is "+ beta.indexOf(letter));

        boolean hasLowercase = !letter.equals(letter.toUpperCase());
           if (hasLowercase)
                 System.out.println("Your letter is " +letter+ " ,lowercase , and its number is "+ alpha.indexOf(letter));
                                                                      }   

   }
  }

恐怕您的代码显示出对Java如何工作的严重困惑

String letter = input.nextLine();
这是一整行,而不仅仅是一个字母

String alpha = " abcdefghijklmnopqrstuvwxyz";
String beta = " ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if ((letter != alpha) && (letter != beta));
最后一行不检查字母,看它是否匹配其中一个字符。它比较
字母
字母
,以确定它们是否引用了相同的字符串,而它们永远不会是

另外,后面的分号终止该语句,因此下面一行

System.out.println(" You entered " +letter+ ", and you obviously can't follow directions."); 
执行时不考虑前面的任何内容——它不是
if
语句的“then”部分

让我们假设用户输入了一个字母,后跟ENTER键。如果要验证字符是否为字母或s空格,请执行以下操作:

if (letter.matches("[a-zA-Z ]") ...

但这只有在输入单个字符时才起作用。我可以继续讲下去,但您需要更多地了解Java,StackOverflow并不是一个真正的教程网站。

要检查用户键入的字母是否应该使用
包含
方法。它不起作用,因为您正在将单个字母与整个字符串进行比较(在本例中,将
字母
α
进行比较,然后与
β
进行比较),这不是您想要完成的。代码示例:

if(!alpha.contains(letter))&&(!beta.contains(letter))){
//史密斯先生

}

问题在于,您正在将输入与alpha或beta变量值进行比较,而alpha或beta变量值永远不会匹配任何唯一有效的字母

建议的修改:

  • “if”后面的分号表示 条件下,行“System.out.println…”将始终与 那个删除分号(更好的是,在 条件)
  • 删除“alpha”和“beta”中的前导空格
  • 通过验证或验证,确保用户仅提供一封信 取第一个字符
  • 然后,假设字母只有一个字符,您可以将条件更改为:

        if(!(alpha.contains(letter) || beta.contains(letter)))
    
所以我要做这些改变:

        //Changed this line to use the first non-blank character
        //You may need to perform a length check before calling substring.
        String letter = input.nextLine().trim().substring(0, 1);
        String alpha = "abcdefghijklmnopqrstuvwxyz";
        String beta = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

        if(!(alpha.contains(letter) || beta.contains(letter))){
            System.out.println(" You entered " +letter+ ", and you obviously can't follow directions.");
        }
        //And the rest of your code...  

为什么你们要把单个字母和整个大写或小写字母进行比较?学校项目。我是Java的极端初学者,所以这段代码不是很好。但是,关于如何让它发挥作用有什么建议吗?啊,这是有道理的。非常感谢!