2016-02-07 40 views
-1

我需要让此代码识别不是字母的字符。那么,这并不是全部,但那是我遇到的问题。我认为我有正确的代码,它看起来像是有效的,但它也可以用字母表示。继承人的代码。程序似乎绕过了一行代码

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)); 
                     } 

    } 
    } 
+1

为什么要将单个字母与整个大写或小写字母表进行比较? – null

+0

学校项目。它没有真正的目的。 – Beatz

回答

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声明“然后”的一部分。

让我们假设一分钟后用户输入一个字母,然后按ENTER键。如果您想验证字符是字母或个人空间,你会做这样的事情:

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

,但如果输入一个字符,只会工作。我可以继续,但是你需要学习更多关于Java的知识,而且StackOverflow并不是一个真正的教程网站。

+0

我是一个极端的Java初学者,所以这就是为什么这个代码不好。尽管如何使它起作用的任何提示? – Beatz

0

要检查用户是否输入了字母,应使用contains方法。这是行不通的,因为你比较单个字母到整个字符串(在这种情况下,比较letteralpha,然后到beta)什么不是你想要完成的。代码示例:

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

+0

啊,这很有道理。谢谢一堆! – Beatz

0

的问题是,你输入比较你的α或β变量值,这将永远不会匹配任何唯一且有效的信。

修改建议:

  • 你的“如果”被废止的 条件之后的效果分号,行“的System.out.println ......”总是与 运行。通过任一验证或 取第一删除分号(和甚至更好,所述 条件后加括号)
  • 除去在“阿尔法”和“测试”
  • 前导空格确保用户提供只有一个字母性格
  • 然后,假设信只有一个字符,你可以改变你的条件:

    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...