程序跳过其中一个输入

时间:2015-01-04 18:31:52

标签: java arrays eclipse

当我的程序到达要求输入水果名称的部分时,它将输出要求输入名称的字符串,然后立即转到下一个字符串输出而不等待用户输入。 这似乎会自动为我的名称变量赋值null。

Fruit.java

public class Fruit {

    String Name;
    int Quantity;
    double Mass;

    public Fruit(String Name, int Quantity, double Mass) {
        this.Name = Name;
        this.Quantity = Quantity;
        this.Mass = Mass;
    }

    public void Information() {
        System.out.println("This fruit is an " + Name + ", there's " + Quantity
                + " of it and it weighs " + Mass + " grams");
    }
}

Fruits.java

import java.util.Scanner;

public class Fruits {

    public static void main(String[] args) {

        Fruit menu[];
        int number;
        String name;
        int quantity;
        double mass;

        System.out
                .print("How many fruits would you like to add to the menu?: ");

        Scanner input = new Scanner(System.in);

        number = input.nextInt();
        input.nextLine();
        menu = new Fruit[number];

        for (int i = 0; i < menu.length; i++) {

            System.out.println("What would you like to name the fruit?: ");
            name = input.nextLine();

            System.out.println("How much fruits are there?: ");
            quantity = input.nextInt();

            System.out.println("What is the mass of the Fruit in grams?: ");
            mass = input.nextDouble();

            menu[i] = new Fruit(name, quantity, mass);

            menu[i].Information();
        }
        input.close();
    }
}

3 个答案:

答案 0 :(得分:2)

而不是input.nextInt();使用Integer.parseInt(input.nextLine())。它可以解决你的问题。

答案 1 :(得分:1)

问题是扫描int,然后是nextLine。当你运行.nexInt()时,我相信有一个没有扫描的换行符,所以这会立即与下面的.nextLine()混淆,因为它只接受换行符,后面没有任何内容 我所知道的最简单的修复是

number = input.nextInt();
input.nextLine();
menu = new Fruit[number];

然后其余的代码应该可以工作

顺便说一句,通常你会从0开始循环,因为数组从0开始,你将有一个空白的第一个条目,但我不认为这在特定的代码片段中很重要

答案 2 :(得分:1)

使用input.nextInt()时,集线器中有%n个字符。您需要使用input.nextLine()之后删除换行符。您还可以对每个变量使用input.nextLine(),然后自己解析。

警告!在java约定中,方法名称,属性名称和参数名称必须以小写字符开头。