如果发布了类似的问题,我很抱歉,我找不到它。这是我的代码:
import java.util.*;
public class InputArraysNextLine
{
static Scanner q = new Scanner(System.in);
public static void main(String[] args)
{
System.out.print("n = ");
int n = q.nextInt();
int[] a = new int[n];
String[] b = new String[n];
for (int i = 0; i < n; i++)
{
System.out.print("Enter student name: ");
b[i] = q.nextLine();
q.next();
System.out.print("Enter student number: ");
a[i] = q.nextInt();
}
for (int i : a)
System.out.print(i + " ");
System.out.println();
for (String j : b)
System.out.print(j + " ");
}
}
我打算在控制台上显示数组a和b,但只显示a。我相信nextLine()方法与此有关;即使我在控制台显示“输入学生姓名:”时实际上可以输入内容,程序也不会将输入存储到b字符串中。
答案 0 :(得分:1)
Scanner.nextInt()不使用换行符,因此在抓取int后跳过它需要调用nextLine()
。致电next()
后,您也无需致电nextLine()
。
for (int i = 0; i < n; i++)
{
System.out.print("Enter student name: ");
b[i] = q.nextLine().trim(); // b is the whole line, trim() removes leading and trailing whitespace
System.out.print("Enter student number: ");
a[i] = q.nextInt();
q.nextLine(); // nextInt() does not
}
你还应该知道,只运行一个期望能够抓住一些东西的循环也有点狡猾 - 你真的应该在你试图抓住之前检查一下以避免崩溃(例如输入流终止)。可以使用has
函数进行检查 - 代币为hasNext()
,行为hasNextLine()
,整数为hasNextInt()
,依此类推。
答案 1 :(得分:0)
你应该尝试替换:
b[i] = q.nextLine();
q.next();
使用:
b[i] = q.next();
由于q.nextLine()
返回流中跳过的输入,而不是此处的情况。
答案 2 :(得分:0)
q.nextLine javadoc声明“使此扫描器超过当前行并返回输入 已被跳过。“您获取用户输入的输入的功能。
所以你需要反转b [i]
中捕获的内容b [i] = q.nextLine(); q.next()
到
b [i] = q.next(); q.nextLine();