这里我试图从用户获得两个键盘输入到一个数组索引位置。
/*
* 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);
}
}
}
我是java的新手,不知道如何解决这个问题。
答案 0 :(得分:3)
由于12
和NY
在不同的行上,所以
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
对象的创建时12
为no
,<empty_string>
为name
。 For循环启动它是第二次执行。NY
并点击返回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);
}
}
}