我的扫描仪有问题 当我运行该程序时,它会在
之后跳过这个程序System.out.println("name");
n1=s.nextLine();
这是程序“CEmploye”是一个类
package Ex5_2;
import java.util.*;
public class XXXX {
public static void main(String[] args) {
int input;
int c1 ;
String n1;
Date d1 = null;
float p1;
float [] t = new float[3];
System.out.println("give nb of emp");
Scanner s = new Scanner(System.in);
input=s.nextInt();
Vector v = new Vector(input);
for(int i=0 ;i <input;i++)
{
System.out.println("cin");
c1=s.nextInt();
System.out.println("name");
n1=s.nextLine();
System.out.println("price");
p1=s.nextFloat();
for(int k=0 ; k<3;k++)
{
System.out.println("nb of hour");
CEmploye.tab[k]=s.nextFloat();
}
CEmploye emp = new CEmploye(c1,n1,d1,p1);
emp.CalculSalaire();
System.out.println(emp.salaire);
}
}
}
任何人都可以给我解决方案吗?
答案 0 :(得分:0)
您无法将n1=s.nextLine();
与n1=s.nextInt()
一起使用。使用n1=s.next()
;
答案 1 :(得分:0)
System.in的缓冲区在获取换行符之前不会被刷新。因此,您无法使用nextInt()
或nextFloat()
,因为它们会阻止直到换行符。
你需要自己阅读一行中的所有内容然后解析它(根据需要进行一些验证):
cl = Integer.parseInt(s.nextLine());
和
pl = Float.parseFloat(s.nextLine());
和
CEmploye.tab[k]=Float.parseFloat(s.nextLine());
答案 2 :(得分:0)
nextInt()只读取下一个可用的整数,并在输入流中留下换行符。 然后你的s.nextLine()会被消耗,因此不会提示输入额外的输入。
只需添加另一个nextLine()即可阅读更多行
答案 3 :(得分:0)
c1=s.nextInt();
这只是读取整数值而不是行尾。所以当你这样做时
n1=s.nextLine();
它只是读取你提供的行的结尾,同时为前一个变量(c1)提供整数输入,因此它似乎跳过了输入。 (如果在输入c1输入时将一个整数和一些字符串放在同一行中,您将获得c1和n1的值。您可以检查相同的内容)
为了解决它,在每个nextInt()之后输入nextLine()输入。希望它有所帮助。