Java Object Array,要求两个不同的输入?

时间:2015-03-16 23:56:17

标签: java

所以这是我的测试类:

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;
}

2 个答案:

答案 0 :(得分:2)

您的代码会在两次迭代后跳过询问标题,因为您使用 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;
    }
}

答案 1 :(得分:0)

在第一个for循环之后,写:

for(Film currentFilm : f)
{
    System.out.println(currentFilm);
}

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());
        }

        for(Film currentFilm : f)
        {
            System.out.println(currentFilm);
        }
    }

}