扫描仪不会工作

时间:2013-11-12 18:56:00

标签: java input java.util.scanner

我的扫描仪有问题 当我运行该程序时,它会在

之后跳过这个程序
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);
        }       
    }
}

任何人都可以给我解决方案吗?

4 个答案:

答案 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()输入。希望它有所帮助。