-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

メソッドを次のように変更する必要があります

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 に答える
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()

}

Film クラスに欠陥があるため、おそらく問題が発生しています。このようにしてください:

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 に答える
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 に答える
0

メソッドpublic skrivUtInfo (Film[] qwert, int a)に戻り値の型が指定されていません。Javavoidでは、戻り値として a または有効な型を持つ必要がありますが、 を返しているのがわかります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 に答える