2012-05-23 110 views
-3

我有一个任务要做,那就是制作电影档案。这里是我的任务:java方法错误

Besides the main program, create a custom class that stores information about a movie. This class is then used in the main program. The following information should be stored for each film

title 
length 
grade 
format 
year 

然后

In the main program, you should be able to store 1,000 films. The user should be able to do the following in the program (make a selection menu):

• Enter the information about a movie. Make a method for loading a movie from the user.

• Print the information on all films. Make a method for printing a film and use it.

• Save all your movies to a file. Please do your own method for this.

• Download movies from a file. Please do your own method for this.

的问题是,我与我的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[]; 
     } 
    } 
} 
+1

什么是错误?什么是堆栈跟踪? –

+0

非法开始表达 – Semthan

回答

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

比X 我做到了,但我得到空?? – Semthan

+0

做了什么?发布一些代码。你做错了。 – duffymo

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返回类型的方法指定的回报。

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) 

也提示,在电影类,你可以从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; 

    } 
} 

so 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); 
    } 
} 
+0

谢谢你的人寻求帮助,但我得到了一些错误 Filmarkiv.java:75:错误:错误:表达 \t公共无效skrivUtInfo(电影[] QWERT){ \t^ Filmarkiv.java:75的非法启动:非法开始表达 \t public void skrivUtInfo(Film [] qwert){ \t^ Filmarkiv.java:75:error:';'预计 \t public void skrivUtInfo(Film [] qwert){ \t^ Filmarkiv.java:75:error:';'预期 \t公共无效skrivUtInfo(电影[] QWERT){ \t^ 4个错误 工具退出码1 – Semthan

+0

我的错完成。将skrivUtInfo声明为静态。你需要关闭支架 – pbaris

+0

okey,谢谢你 – Semthan

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; 

    } 
} 
+0

谢谢你,我会尝试它:) – Semthan