程序似乎绕过了一行代码

时间:2016-02-07 06:27:47

标签: 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.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));
                                                                      }   

   }
  }

3 个答案:

答案 0 :(得分:0)

我担心你的代码会对Java的运作方式产生很大的困惑。

String letter = input.nextLine();

这会读取整行,而不只是一个字母

String alpha = " abcdefghijklmnopqrstuvwxyz";
String beta = " ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if ((letter != alpha) && (letter != beta));

最后一行不检查letter以查看它是否与其中一个字符匹配。它比较letteralpha以确定它们是否是对相同字符串的引用,它们永远不会。

此外,尾随分号终止语句,因此以下行

System.out.println(" You entered " +letter+ ", and you obviously can't follow directions."); 

无论前面的任何事情都执行 - 它不是if语句的“then”部分。

让我们假设用户输入单个字母后跟ENTER键一分钟。如果你想验证字符是字母还是空格,你可以这样做:

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

但只有在输入单个字符时才会起作用。我可以继续,但你需要学习更多关于Java的知识,而StackOverflow并不是一个真正的教程网站。

答案 1 :(得分:0)

要检查用户是否输入了一个字母,您应该使用contains方法。它不起作用,因为您将单个字母与整个字符串进行比较(在这种情况下,将letteralpha进行比较,然后再与beta进行比较),这不是您想要完成的任务。代码示例:

if((!alpha.contains(letter))&&(!beta.contains(letter))) { //do smith }

答案 2 :(得分:0)

问题在于您将输入与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...