首先我希望用户输入一些东西(名字,联系人,idnumber),我会显示2个不同的文件,但代码是相同的。第一个代码问题是“名称”输入位置消失,第二个但不会消失任何人都可以告诉我这个问题吗?我是java新手。
public class Admin {
static Scanner scan= new Scanner(System.in);
static Client client = new Client();
public void admin(){
newClient []nc = new newClient[10];
\\login();
while(true){
System.out.println("Select 1:add Client\n 2:add Account\n 3:login as Client");
try{
int selection = scan.nextInt();
switch(selection)
{
case 1: addClient(nc);
break;
case 2: \\addAccount(nc);
break;
case 3: ;
break;
default: System.out.println("INvalid selection");
}
}
catch(InputMismatchException ex){
System.out.println("Invalid input");
scan.nextLine();
}
}
}
public void addClient(newClient []nc){
for(int i=0;i<nc.length;i++){
System.out.println("Enter name");
String name = scan.nextLine();
System.out.println("Enter contact");
String contact = scan.nextLine();
System.out.println("Enter id number");
String idNumber = scan.nextLine();
nc[i]=new newClient(name,contact,idNumber);
System.out.println(nc[i]);
}
}
第一个代码的输出是
输入姓名
输入联系人
为什么缺少名称输入位置? 还有第二个代码
public static void main(String[]args){
Scanner scan =new Scanner(System.in);
for(int i=0;i<nc.length;i++){
System.out.println("Enter name");
String name = scan.nextLine();
System.out.println("Enter contact");
String contact = scan.nextLine();
System.out.println("Enter id number");
String idNumber = scan.nextLine();
nc[i]=new newClient(name,contact,idNumber);
System.out.println(nc[i]);
}
}
第二个代码工作正常。
输入姓名
输入联系人
输入idNumber
答案 0 :(得分:1)
这两段代码实际上是不同的。
在第二个代码中,scan
对象是一个全新的对象。您调用的唯一方法是nextLine()
。在第一个代码中,scan
对象创建了一个类级别,并且在调用addClient
之前已使用 。
&#34;已被使用&#34;这里非常重要。我的意思是你在nextInt
上调用了scan
然后nextLine
:
int selection = scan.nextInt(); <-- You called nextInt here!
switch(selection)
{
case 1: addClient(nc);
break;
case 2: \\addAccount(nc);
break;
case 3: ;
break;
default: System.out.println("INvalid selection");
}
}
catch(InputMismatchException ex){
System.out.println("Invalid input");
scan.nextLine();
}
}
}
public void addClient(newClient []nc){
for(int i=0;i<nc.length;i++){
System.out.println("Enter name");
String name = scan.nextLine(); <-- then you called nextLine here!
System.out.println("Enter contact");
String contact = scan.nextLine();
System.out.println("Enter id number");
String idNumber = scan.nextLine();
nc[i]=new newClient(name,contact,idNumber);
System.out.println(nc[i]);
}
}
这使得nextLine
方法返回一个空字符串。
为什么?
让我们看看nextInt
和nextLine
的{{3}}:
nextInt()
将输入的下一个标记扫描为int。
nextLine()
使此扫描程序超过当前行并返回跳过的输入。
我创建了一个更简单的代码来重现这种情况,以解释为什么在nextLine
之后立即调用nextInt
会导致问题:
Scanner s = new Scanner(System.in);
s.nextInt();
System.out.println(s.nextLine());
我将使用|
字符来表示扫描仪的当前位置。
程序启动时,
|
然后我输入数字20:
|20
现在扫描仪读取20,根据文件,扫描仪应该在这个位置:
20|
有趣的部分,nextLine
&#34;推进此扫描程序超过当前行并返回跳过的输入。&#34;
20
|
那么扫描仪跳过什么输入?没有!结果,返回一个空字符串。
答案 1 :(得分:0)
ΦXocę 웃 Пepeúpa ツ
表示scan.nextInt
无法阅读enter
。
所以替代解决方案是在阅读name contact id
信息之前,使用scan.nextLine()
来阅读enter
,如下所示:
public void addClient(newClient []nc){
scan.nextLine();
for(int i=0;i<nc.length;i++){
....// your origin code
}