输入,数组和NextLine

时间:2012-11-13 21:13:49

标签: java arrays input

如果发布了类似的问题,我很抱歉,我找不到它。这是我的代码:

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字符串中。

3 个答案:

答案 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();