Java 我有一个for循环,它在继续之前不会等待输入

Java 我有一个for循环,它在继续之前不会等待输入,java,for-loop,textinput,file-writing,Java,For Loop,Textinput,File Writing,我有一段代码,应该是问一个问题,获取输入,然后问下一个问题。这段代码不仅不等待第一次输入,而且不允许我执行第二次输入。我是java新手,我反复阅读了关于文件输入的章节。然而,我仍然不明白为什么会发生这种错误。 在这段代码之外创建的两个字符串变量(pword、uname)以及需要向文件追加数据的FileWriter和PrintWriter类也存在于循环之外。我是否需要在每次输入之前和之后打开和关闭文件?这似乎太过分了 for (index = 0; index <= arraylength;

我有一段代码,应该是问一个问题,获取输入,然后问下一个问题。这段代码不仅不等待第一次输入,而且不允许我执行第二次输入。我是java新手,我反复阅读了关于文件输入的章节。然而,我仍然不明白为什么会发生这种错误。 在这段代码之外创建的两个字符串变量(pword、uname)以及需要向文件追加数据的FileWriter和PrintWriter类也存在于循环之外。我是否需要在每次输入之前和之后打开和关闭文件?这似乎太过分了

for (index = 0; index <= arraylength; index ++)
        {


   System.out.println("Enter a username..");
   uname = keyboard.nextLine(); 
   outputFile.println(uname);

   System.out.println("Enter a password..");
   pword = keyboard.nextLine();
   outputFile.println(pword);



        }

for(index=0;index您可以使用java.util.Scanner从标准输入读取数据

Scanner scan = new Scanner(System.in);
System.out.println("Enter a username..");
uname = scan.next(); 

这将等待您按Enter键。希望它能帮助您

您可以使用java.util.Scanner从标准输入读取数据

Scanner scan = new Scanner(System.in);
System.out.println("Enter a username..");
uname = scan.next(); 

这将等待您按Enter键。希望它能帮助您

我更喜欢使用BufferedWriter,而不是PrintWriter及其与BufferedWriter的配合:

    int index;
    int arraylength;
    String uname, pword;

    Scanner keyboard = new Scanner(System.in);

    // create users
    System.out.println("How many users would you like to create");
    arraylength = keyboard.nextInt();

    /*
     * create a filewriter object, name the registration database, and
     * create the file using the name of the database.
     * 
     * Pass the filewriter object to the print writer object as an arg
     */

    BufferedWriter bw = new BufferedWriter(new FileWriter(
            "full file path goes here",true));

    // loop user creation
    for (index = 1; index <= arraylength; index++) {

        keyboard = new Scanner(System.in);
        System.out.println("Enter a username..");
        uname = keyboard.next(); // create string object
        bw.write(uname);

        keyboard = new Scanner(System.in);
        System.out.println("Enter a password..");
        pword = keyboard.next();
        bw.write(pword);

        bw.newLine();
    }
    bw.close();
int索引;
内部排列长度;
字符串uname,pword;
扫描仪键盘=新扫描仪(System.in);
//创建用户
System.out.println(“您希望创建多少用户”);
arraylength=键盘.nextInt();
/*
*创建filewriter对象,命名注册数据库,然后
*使用数据库的名称创建文件。
* 
*将filewriter对象作为参数传递给print writer对象
*/
BufferedWriter bw=新的BufferedWriter(新文件写入程序(
“此处为完整文件路径”,true);
//循环用户创建

对于(index=1;index我更喜欢使用BufferedWriter而不是PrintWriter,以及它与BufferedWriter的配合:

    int index;
    int arraylength;
    String uname, pword;

    Scanner keyboard = new Scanner(System.in);

    // create users
    System.out.println("How many users would you like to create");
    arraylength = keyboard.nextInt();

    /*
     * create a filewriter object, name the registration database, and
     * create the file using the name of the database.
     * 
     * Pass the filewriter object to the print writer object as an arg
     */

    BufferedWriter bw = new BufferedWriter(new FileWriter(
            "full file path goes here",true));

    // loop user creation
    for (index = 1; index <= arraylength; index++) {

        keyboard = new Scanner(System.in);
        System.out.println("Enter a username..");
        uname = keyboard.next(); // create string object
        bw.write(uname);

        keyboard = new Scanner(System.in);
        System.out.println("Enter a password..");
        pword = keyboard.next();
        bw.write(pword);

        bw.newLine();
    }
    bw.close();
int索引;
内部排列长度;
字符串uname,pword;
扫描仪键盘=新扫描仪(System.in);
//创建用户
System.out.println(“您希望创建多少用户”);
arraylength=键盘.nextInt();
/*
*创建filewriter对象,命名注册数据库,然后
*使用数据库的名称创建文件。
* 
*将filewriter对象作为参数传递给print writer对象
*/
BufferedWriter bw=新的BufferedWriter(新文件写入程序(
“此处为完整文件路径”,true);
//循环用户创建


对于(index=1;index),在执行此代码块之前,数组长度也会由用户输入设置
keyboard.nextLine();
nextLine()命令是问题所在。这里有几个解决方案,答案并不是很有用。我在这页上尝试了这个解决方案,但仍然得到了相同的错误。我复制了你的代码,并将下一行更改为下一行,它正好工作fine@Berger我很抱歉,你是对的。我来看看那个可能的复制品很快,在执行这段代码之前,数组长度也会由用户输入设置
keyboard.nextLine();
nextLine()的命令是问题所在。这里有几个解决方案,答案并不是很有用。我在这页上尝试了这个解决方案,但仍然得到了相同的错误。我复制了你的代码,并将下一行更改为下一行,它正好工作fine@Berger我很抱歉,你是对的。我来看看那个可能的复制品很快我就用我的“键盘”对象尝试了这个,但它仍然不起作用。这就是我试图向另一个回答者描述的。你的
键盘
对象到底是什么?@XtremeBaumer Scanner keyboard=new Scanner(System.in);好的。如果你移动输出文件,它能起作用吗。println();在循环之外?因为scanner.next()行得通properly@XtremeBaumer如果我这样做,那么用户名和密码将不会按顺序输入,这就是我在这个特定程序中需要的用户名,我想获得用户输入,分配一个变量,将该变量打印到一个文件中,然后对密码重复这个过程。我用我的“键盘”尝试了这个过程对象,它仍然不起作用。这就是我试图向另一个回答者描述的。你的
键盘
对象到底是什么?@XtremeBaumer Scanner keyboard=new Scanner(System.in);好的。如果你将outpuFile.println()移出循环,它能起作用吗?因为Scanner.next()行得通properly@XtremeBaumer如果我这样做,那么用户名和密码将不会按顺序输入,这就是我在这个特定程序中需要的用户名,我想获得用户输入,分配给一个变量,将该变量打印到一个文件,然后对密码重复该过程。如果有,缓冲写入器会覆盖吗已存在一个文件,其名称与我在构造函数中指定的名称相同?在本例中,它确实会覆盖内容。但您可以在filewriter构造函数中添加一个true boolean,然后它会附加。只是更新了我的答案以适应附加。我发现了我的问题。正如我所说,我使用netbeans,并且由于某种原因,当我点击屏幕顶部的run时它不会运行指定的程序。我必须点击运行文件。但是当我这样做时,键盘.next();方法起作用了,所以你总是运行错误的文件?我想是的…我需要研究一下为什么使用屏幕顶部的运行按钮不能运行指定的文件。它(编译器)说它正在运行整个项目,但我不明白它从何处获取其他代码,因为以另一种方式运行它是有效的…如果有一个文件已经存在,并且具有我在构造函数中指定的名称,缓冲编写器会覆盖吗?在这种情况下,它确实会覆盖内容。但是,您可以在filewr中添加一个真正的布尔值iter构造函数,然后它会追加。刚刚更新了我的答案以适应追加。我发现了我的问题。正如我说的,我使用netbeans,当我出于某种原因点击屏幕顶部的run时,它不会运行特定的程序。我没有