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的极端初学者,所以这段代码不是很好。但是,关于如何让它发挥作用有什么建议吗?啊,这是有道理的。非常感谢!