所以这是我的测试课:

import java.util.Scanner;
    public class test {
        public static void main (String[] args){
            Film[] f = new Film[10];
            Scanner input = new Scanner(System.in);
            for (int i=0;i<10;i++){
                f[i] = new Film();

                System.out.println("Enter Title:");
                f[i].setTitle(input.nextLine());

                System.out.println("Enter Film Length:");
                f[i].setLength(input.nextDouble());
            }
        }

    }


我的对象类Film中有getter和setter方法。这里的问题是输出结果为:

Enter Title:
title1
Enter Film Length:
1
Enter Title:
Enter Film Length:
2
Enter Title:
Enter Film Length:
3
Enter Title:
Enter Film Length:


我该如何修正代码,以要求输入10个用户输入的标题和长度,并在最后显示所有电影的标题和长度?

谢谢。

*我还有一个toString方法:

public String toString(){
    return "Title: "+title+" Length: "+length;
}

最佳答案

您的代码在两次迭代后跳过询问标题,因为您使用nextLine()获得标题。在这种情况下,您必须使用next()。

在您的代码中,例如,如果第一个input.nextDouble()收到,

1\n


然后,nextDouble()仅取值“ 1”,并将“ \ n”传递给第二次迭代的nextLine()。

最后,nextLine()读取“ \ n”作为新行,并且nextDouble()在第二次迭代中及之后立即执行。

整个修订的代码如下。

import java.util.Scanner;

public class test {
    public static void main (String[] args){
        Film[] f = new Film[10];
        Scanner input = new Scanner(System.in);
        for (int i = 0; i < 10; i++){
            f[i] = new Film();

            System.out.println("Enter Title:");
            f[i].setTitle(input.next());

            System.out.println("Enter Film Length:");
            f[i].setLength(input.nextDouble());
        }
        input.close();

        for (int i = 0; i < 10; i++) {
            System.out.println(f[i]);
        }
    }
}

class Film {
    private String title;
    private double length;
    public Film() {

    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setLength(double length) {
        this.length = length;
    }

    public String toString() {
        return "Title: "+title+" Length: "+length;
    }
}

10-05 17:54