-3

我有一个任务要做,那就是制作电影档案。以下是我的任务:

除了主程序之外,创建一个自定义类来存储有关电影的信息。然后在主程序中使用这个类。应为每部电影存储以下信息

title
length
grade 
format
year

然后

在主程序中,您应该能够存储 1,000 部电影。用户应该能够在程序中执行以下操作(进行选择菜单):

• 输入有关电影的信息。制作一个从用户加载电影的方法。

• 打印所有胶片的信息。制作一种打印胶片的方法并使用它。

• 将所有电影保存到文件中。请为此做你自己的方法。

• 从文件下载电影。请为此做你自己的方法。

问题是我的skrivUtInfo(PrintOut information)方法有误

我创建了一个包含 1000 部电影的数组列表。但是我怎样才能打印 1000 部电影呢?

这是我的代码:

public class Film {
    String  title ;
    int     length;
    int     grade ;
    String  format ;
    int     year ;
}

import java.util.*;
import java.io.*;

public class Filmarkiv {

    static Scanner sc = new Scanner(System.in);

    public static void main(String[] arg) {

        BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
        Scanner s = new Scanner(inFromUser);

        Film[] film = new Film[1000];

        int antal = 1;

        film[0] = new Film();
        film[0].title = "matrix";
        film[0].length = 220;
        film[0].grade = 5;
        film[0].format = "DVD";
        film[0].year = 1999;

        while(true)
        {
            int n = 0;
            System.out.println("valj 1 for inmata. 2 for utskrift");

            String val = s.next();

            if(val.equals("1")){
                System.out.println("vad heter filmen?");
                film[n].title = s.next();

                System.out.println("hur lang ar filmen?");
                film[n].length = s.nextInt();

                System.out.println("vad har den for betyg?");
                film[n].grade = s.nextInt();

                System.out.println("vad har den for format?");
                film[n].format = s.next() ;

                System.out.println("i vilket år har filmen inspelat? ");
                film[n].year = s.nextInt() ;
            }
            else if (val.equals("2"))
            {
                skrivUtInfo(film, antal);

                /*System.out.println("title = "+film[n].title) ;
                System.out.println("length = "+film[n].length) ;
                System.out.println("grade = "+film[n].grade) ;
                System.out.println("format = "+film[n].format) ;
                System.out.println("year = "+film[n].year);*/
            }
        }
    }

    public  skrivUtInfo (Film[]  qwert, int a) {
        for (int n=0; n<a; n++) {
            System.out.println("title = "+film[n].title) ;
            System.out.println("length = "+film[n].length) ;
            System.out.println("grade = "+film[n].grade) ;
            System.out.println("format = "+film[n].format) ;
            System.out.println("year = "+film[n].year) ;

            return Film[];
        }
    }
}
4

4 回答 4

1

如果你已经了解了java.util.List,你可以这样做:

List<Film> films = new ArrayList<Film>();
films.add(new Film("Amadeus", 120, 5, "DVD", 1984);  );  // Add as many as you like
System.out.println(films);  // Make sure your Film class overrides toString()

如果还没有,请循环执行:

Film [] films = new Film[1000];
films[0] = new Film("Amadeus", 120, 5, "DVD", 1984);  
for (Film film : films) {
    System.out.println(film);  // Make sure you File class overrides toString()

}

你可能有问题,因为你的电影课有缺陷。这样做:

public class Film {

    private final String  title ;
    private final int     length;
    private final int     grade ;
    private final String  format ;
    private final int     year ;

    public Film(String title, int length, int grade, String format, int year) {
        this.title = title;
        this.length = length;
        this.grade = grade;
        this.format = format;
        this.year = year;
    }

    public String getTitle() {
        return title;
    }

    public int getLength() {
        return length;
    }

    public int getGrade() {
        return grade;
    }

    public String getFormat() {
        return format;
    }

    public int getYear() {
        return year;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder();
        sb.append("Film");
        sb.append("{title='").append(title).append('\'');
        sb.append(", length=").append(length);
        sb.append(", grade=").append(grade);
        sb.append(", format='").append(format).append('\'');
        sb.append(", year=").append(year);
        sb.append('}');
        return sb.toString();
    }
}
于 2012-05-23T22:32:55.087 回答
1

您必须将方法更改为

public static void skrivUtInfo (Film[] qwert) {
    for (int n=0; n<qwert.length; n++) {
        System.out.println("title = "+qwert[n].title) ;
        System.out.println("length = "+qwert[n].length) ;
        System.out.println("grade = "+qwert[n].grade) ;
        System.out.println("format = "+qwert[n].format) ;
        System.out.println("year = "+qwert[n].year) ;
    }
}

也在这里放一个括号

else if (val.equals("2"))
{
    skrivUtInfo(film);
    // the comments
}
} //<- you must add this bracket. is from while (i think)

还有一个提示,在 Film 类中,您可以覆盖 Object 类中的 toString 方法

public class Film{
    String  title ;
    int     length;
    int     grade ;
    String  format ;
    int     year ;

    public String toString() {
     return "title = " + title +
            "length = " + length +
            "grade = " + grade +
            "format = " + format +
            "year = " + year;

    }
}

所以 skrivUtInfo 变成

public static void skrivUtInfo (Film[] qwert) {
    for (int n=0; n<qwert.length; n++) {
        System.out.println(qwert[n]);
    }
}

或者

public static void skrivUtInfo (Film[] qwert) {
    for (Film f : qwert) {
        System.out.println(f);
    }
}
于 2012-05-23T22:44:43.967 回答
0

该方法public skrivUtInfo (Film[] qwert, int a)没有指定返回类型。在java中,它应该有一个void或一个有效的类型作为返回,但我看到你返回Film[]。你不能那样做。你必须声明像

 public Film[] skrivUtInfo (Film[]  qwert, int a){
   ....
   return qwert;
 }

最终,因为您只是在这里打印东西,所以您不需要返回任何东西。在这种情况下,你应该有

 public  void skrivUtInfo (Film[]  qwert, int a){
   .....
   return;
 }

您可以在具有void返回类型的方法中指定空返回或不返回。

于 2012-05-23T22:33:59.917 回答
0

我已经测试了这段代码并且工作正常。我改变了一些部分,因为我认为它应该播放

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;

public class Filmarkiv {
    static Scanner sc = new Scanner(System.in);

    public static void main(String[] arg) {
        BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
        Scanner s = new Scanner(inFromUser);

        Film[] film = new Film[1000];
        int n = 0;

        do {
            System.out.println("valj 1 for inmata. 2 for utskrift");
            String val = s.next();

            if (val.equals("1")) {
                film[n] = new Film();

                System.out.println("vad heter filmen?");
                film[n].title = s.next();

                System.out.println("hur lang ar filmen?");
                film[n].length = s.nextInt();

                System.out.println("vad har den for betyg?");
                film[n].grade = s.nextInt();

                System.out.println("vad har den for format?");
                film[n].format = s.next();

                System.out.println("i vilket år har filmen inspelat? ");
                film[n].year = s.nextInt();

                n++;
            } else if (val.equals("2")) {
                skrivUtInfo(film);
            }
        } while(n < film.length);

    }

    public static void skrivUtInfo (Film[] qwert) {
        for (Film f : qwert) {
            if (f != null)
                System.out.println(f);
        }
    }
}

class Film {
    String title;
    int length;
    int grade;
    String format;
    int year;

    public String toString() {
        return "title = " + title + ", length = " + length + ", grade = " + grade
                + ", format = " + format + ", year = " + year;

    }
}
于 2012-05-31T20:20:19.397 回答