如何使用循环将键盘输入值放入数组?

时间:2017-04-22 11:34:31

标签: java

这里我试图从用户获得两个键盘输入到一个数组索引位置。

 /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    package tour;

    import java.util.Scanner;
    import tour.City;

    /**
     *
     * @author dp
     */
    public class Tour {

        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here

            City[] city = new City[9];

            Scanner in = new Scanner(System.in);

            for(int i=0;i<city.length;i++)
            {
                int no = in.nextInt();
                String name = in.nextLine();

                city[i]= new City(no,name);
            }
        }

    }

当我运行此代码时,它会给我以下异常。enter image description here

我是java的新手,不知道如何解决这个问题。

3 个答案:

答案 0 :(得分:3)

由于12NY在不同的行上,所以

String name = in.nextLine();

你找回的String是空的。这是因为Scanner的“阅读点”位于12之后,但位于其后的行尾标记之前。

您可以通过添加另一个nextLine并删除其结果来解决此问题:

in.nextLine(); // Skip to end-of-line after the number
String name = in.nextLine();

答案 1 :(得分:0)

您正在使用nextInt()nextLine()方法来读取用户输入,这些方法会读取next可用令牌,因此这就是现有代码的工作方式:

  • 它使用nextInt()读取一个数字并将其分配给no
  • 然后用户点击return并且控件读取一个空行(下一行为空)并将其分配给name
  • City对象的创建时12no<empty_string>name。 For循环启动它是第二次执行。
  • 此时,用户已输入NY并点击返回
  • 因为它期望令牌是一个int(通过调用nextInt()),它会失败并抛出异常。

如果您希望控件分别读取两个输入(并等到用户点击返回),请使用:

int no = Integer.parseInt(in.next());
String name = in.next();

答案 2 :(得分:0)

只需要将int读到行的最后一行

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package tour;

import java.util.Scanner;
import tour.City;

/**
 *
 * @author dp
 */
public class Tour {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        City[] city = new City[9];

        Scanner in = new Scanner(System.in);

        for(int i=0;i<city.length;i++)
        {
            int no = in.nextInt();
            in.nextLine();//read to the end of line 
            String name = in.nextLine();

            city[i]= new City(no,name);
        }
    }

}