Java 扫描仪不工作?
我是Java新手,我正在尝试制作一个Java应用程序,它要求您拼写“Java”,如果您拼写正确,它将键入“是”,但是,它键入的是“否”,我做错了什么:Java 扫描仪不工作?,java,Java,我是Java新手,我正在尝试制作一个Java应用程序,它要求您拼写“Java”,如果您拼写正确,它将键入“是”,但是,它键入的是“否”,我做错了什么: package quiz; import java.util.Scanner; public class quiz { public static void main(String[] args) { Scanner kirill = new Scanner(System.in); System.out.p
package quiz;
import java.util.Scanner;
public class quiz {
public static void main(String[] args) {
Scanner kirill = new Scanner(System.in);
System.out.println(kirill.next());
String kirill2 = "Java";
if (kirill.equals(kirill2)){
System.out.println("yes");
}else{
System.out.println("no");
}
System.out.println(kirill);
kirill.close();
}
}
运行代码:
爪哇
爪哇
没有
java.util.Scanner[delimiters=\p{javaWhitespace}+][position=4][match valid=true][need input=false][source closed=false][skipped=false][group separator=\,][decimal separator=.][positive prefix=][negative suffix=][NaN string=\Q?\E][infinity string=\Q?\E]
kirill
是Scanner
对象,而不是字符串。试着这样做:
Scanner kirill = new Scanner(System.in);
String userInput = kirill.next();
if (userInput.equals("Java")){
...
另外,请注意,如果用户键入“Java是一个编程语言”,则代码将打印“是”。如果您只想用“Java”进行验证,请用nextLine
替换nextLine
package quiz;
import java.util.Scanner;
public class quiz {
public static void main(String[] args) {
String kirill;
String kirill2 = "Java";
Scanner input = new Scanner(System.in);
kirill = input.next();
if (kirill.equals(kirill2)){
System.out.println("yes");
}else{
System.out.println("no");
}
System.out.println(kirill);
input.close();
}
}
您的
扫描仪出现小问题。您试图将扫描仪
与字符串
匹配。你不能这么傻 将读取的内容保存到字符串中,而不是将扫描仪
对象与字符串
进行比较。您的main
方法应该如下所示
public static void main(String[] args) {
Scanner kirill = new Scanner(System.in);
String input = kirill.nextLine();
System.out.println(input);
String kirill2 = "Java";
if (input.equals(kirill2)){
System.out.println("yes");
}else{
System.out.println("no");
}
System.out.println(kirill);
kirill.close();
}
另外,请注意,它将只扫描到第一个分隔符(默认情况下为任何空格),因此如果您想确保用户只键入“Java”
,那么您可能应该使用而不是。下一步()
让我们快速查看一下您的代码,在main()
:
创建扫描程序并将其分配给变量,确定
System.out.println(kirill.next());
打印用户键入的内容,但不将其分配给任何内容
只是一个字符串变量。。。嗯
if (input.equals(kirill2)){
如果扫描仪与一些文本相等,则继续。等等,你明白我刚才说的吗?比较扫描仪和字符串。这样的结局是不对的。想象一个机器人,你给它一杯水和一张写着“水”的纸,然后问它们是否相等。显然他们不是,也不可能是。您将一个设定值与另一个设定值进行比较,而不是用户的输入。以下是正确的:
package quiz;
import java.util.Scanner;
public class quiz {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); //creates a scanner
String text = "Java"; //creates the text to be compared
String input = scan.nextLine(); //read some arbitrary text the user types
if (input.equals(text)){ //checks if user's input is equal to text
System.out.println("yes");
}else{
System.out.println("no");
}
scan.close(); //closes the Scanner
}
}
虽然不是必需的,但最好按照变量的作用或表示来命名变量,否则您很快就会感到困惑……因此,这里有一个更简单的方法:
package quiz;
import java.util.Scanner;
public static void main(String[] args) {
String userInput;
String word = "Java":
Scanner in1 = new Scanner(System.in);
userInput = in1.next();
System.out.println( userInput );
if (word.equals(userInput)) {
System.out.println("Yes!");
}else{
System.out.println("No.");
}
System.out.println( userInput );
userInput.close();
}/P>您应该考虑使用有意义的变量名,即使它们与类名相同。另外,尝试在调试器中单步执行代码,并戳出内容的值。这两条弦真的相等吗?可能您正在从控制台读取的用户名末尾有一个换行符或其他内容。包名通常是
com.example.name
和类名通常以大写字母开头。我们知道您喜欢您的用户名,但它必须停止。+1和变量名的主要问题:)
if (input.equals(kirill2)){
package quiz;
import java.util.Scanner;
public class quiz {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); //creates a scanner
String text = "Java"; //creates the text to be compared
String input = scan.nextLine(); //read some arbitrary text the user types
if (input.equals(text)){ //checks if user's input is equal to text
System.out.println("yes");
}else{
System.out.println("no");
}
scan.close(); //closes the Scanner
}
}
package quiz;
import java.util.Scanner;
public static void main(String[] args) {
String userInput;
String word = "Java":
Scanner in1 = new Scanner(System.in);
userInput = in1.next();
System.out.println( userInput );
if (word.equals(userInput)) {
System.out.println("Yes!");
}else{
System.out.println("No.");
}
System.out.println( userInput );
userInput.close();