这个程序实际上如何运作......?
import java.util.Scanner;
class string
{
public static void main(String a[]){
int a;
String s;
Scanner scan = new Scanner(System.in);
System.out.println("enter a no");
a = scan.nextInt();
System.out.println("no is ="+a);
System.out.println("enter a string");
s = scan.nextLine();
System.out.println("string is="+s);
}
}
输出结果为:
enter the no
1234
no is 1234
enter a string
string is= //why is it not allowing me to enter a string here?
答案 0 :(得分:17)
.nextInt()
获取下一个int
,但不会读取换行符。这意味着当您要求它读取“下一行”时,您将从第一次开始读取新行字符的结尾。
您可以在.nextLine()
解决此问题后插入另一个int
。或者(我更喜欢这种方式),将int
作为string
阅读,并将其解析为int
。
答案 1 :(得分:5)
这是一种常见的误解,如果您在使用nextInt()之后立即使用相同的Scanner for nextLine(),则会导致混淆。
您可以自行修复光标跳到下一行,也可以为整数使用不同的扫描仪。
选项A:使用2种不同的扫描仪
import java.util.Scanner;
class string
{
public static void main(String a[]){
int a;
String s;
Scanner intscan =new Scanner(System.in);
System.out.println("enter a no");
a=intscan.nextInt();
System.out.println("no is ="+a);
Scanner textscan=new Scanner(System.in);
System.out.println("enter a string");
s=textscan.nextLine();
System.out.println("string is="+s);
}
}
选项B:跳转到下一行
class string
{
public static void main(String a[]){
int a;
String s;
Scanner scan =new Scanner(System.in);
System.out.println("enter a no");
a = scan.nextInt();
System.out.println("no is ="+a);
scan.nextLine();
System.out.println("enter a string");
s = scan.nextLine();
System.out.println("string is="+s);
}
}
答案 2 :(得分:2)
您只需使用scan.next()
即可阅读String
。
答案 3 :(得分:2)
这是因为在nextInt()完成它的执行之后,当调用nextLine()方法时,它会扫描nextInt()之后出现的换行符。您可以通过以下任一方式执行此操作:
您可以在扫描仪对象上使用下一个方法
scan.next();
答案 4 :(得分:1)
扫描程序的缓冲区已满 所以它下次跳过输入。 所以解决方案是我们可以创建一个新的Scanner对象,对象的名称可以是相同的 作为前一个对象......
答案 5 :(得分:1)
不要尝试使用nextLine()扫描文本;在使用相同扫描仪的nextInt()之后!它与Java Scanner不兼容,许多Java开发人员选择仅使用另一个Scanner进行整数。如果需要,可以将这些扫描仪调用为scan1和scan2。
答案 6 :(得分:1)
使用临时 scan.nextLine();
这将消耗\ n字符
答案 7 :(得分:0)
如果您不想使用解析器:
int a;
String s;
Scanner scan = new Scanner(System.in);
System.out.println("enter a no");
a = scan.nextInt();
System.out.println("no is =" + a);
scan.nextLine(); // This line you have to add (It consumes the \n character)
System.out.println("enter a string");
s = scan.nextLine();
System.out.println("string is=" + s);
答案 8 :(得分:0)
如果您不想使用nextint,您也可以使用缓冲读卡器,其中使用inputstream
和readline
函数读取字符串。
答案 9 :(得分:0)
使用\ n字符的简单解决方案:
import java.util.Scanner;
class string
{
public static void main(String a[]){
int a;
String s;
Scanner scan = new Scanner(System.in);
System.out.println("enter a no");
a = scan.nextInt();
System.out.println("no is ="+a);
scan.nextLine();
System.out.println("enter a string");
s = scan.nextLine();
System.out.println("string is="+s);
}
}
答案 10 :(得分:0)
import java.util.*;
public class ScannerExample {
public static void main(String args[]) {
int a;
String s;
Scanner scan = new Scanner(System.in);
System.out.println("enter a no");
a = scan.nextInt();
System.out.println("no is =" + a);
System.out.println("enter a string");
s = scan.next();
System.out.println("string is=" + s);
}
}
答案 11 :(得分:0)
.nextInt()
,.nextLine()
将不会读取“下一行”直到最后。
我建议尝试在 'int' 之前扫描 'String'
s = scan.nextLine();
a = scan.nextInt();
按照这个顺序。
答案 12 :(得分:-1)
s=scan.nextLine();
它返回输入被跳过。
所以你可以使用
s=scan.next();