0

我的扫描仪有问题当我运行程序时它会跳过这个

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

4 回答 4

0

你不能使用n1=s.nextLine();with n1=s.nextInt()。使用n1=s.next()

于 2013-11-12T18:59:29.207 回答
0

System.in 的缓冲区在获得换行符之前不会被刷新。所以你不能使用nextInt()或者nextFloat()因为他们阻塞直到换行。

您需要单独阅读一行中的所有内容,然后对其进行解析(根据需要进行一些验证):

cl = Integer.parseInt(s.nextLine());

pl = Float.parseFloat(s.nextLine());

CEmploye.tab[k]=Float.parseFloat(s.nextLine());
于 2013-11-12T19:03:21.370 回答
0

nextInt() 仅读取下一个可用整数并在输入流中留下换行符。然后您的 s.nextLine() 会被消耗,因此不会提示您输入其他内容。

只需添加另一个 nextLine() 即可阅读更多行

于 2013-11-12T19:05:09.720 回答
0
     c1=s.nextInt();

这只是读取整数值而不是行尾。所以当你这样做时

      n1=s.nextLine();

它只是读取您通过按回车键提供的行尾,同时为前一个变量(c1)提供整数输入,因此看起来它跳过了输入。(如果在接受 c1 输入时将整数和一些字符串放在同一行,您将同时获得 c1 和 n1 的值。您可以检查相同)
为了修复它,要么在每个 nextInt( )。希望能帮助到你。

于 2013-11-12T19:11:11.707 回答