【问题标题】:java method errorjava方法错误
【发布时间】:2012-05-23 22:28:05
【问题描述】:

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

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

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

【问题讨论】:

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

标签: java arrays methods return


【解决方案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);
    }
}

【讨论】:

  • 谢谢你的帮助,但我遇到了一些错误 Filmarkiv.java:75: 错误: 表达式的非法开始 public void skrivUtInfo (Film[] qwert) { ^ Filmarkiv.java:75: error:表达式的非法开头 public void skrivUtInfo (Film[] qwert) { ^ Filmarkiv.java:75: error: ';'预期的公共无效 skrivUtInfo (Film[] qwert) { ^ Filmarkiv.java:75: error: ';'预期 public void skrivUtInfo (Film[] qwert) { ^ 4 errors 工具完成,退出代码 1
  • 我的错。将 skrivUtInfo 声明为静态的。你需要关闭一个括号
  • 当我按 2 时什么也没发生??
【解决方案2】:

如果你了解了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();
    }
}

【讨论】:

  • thanX 我做到了,但我得到了 null ??
【解决方案3】:

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 返回类型的方法中指定空返回或不返回。

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-09-03
      • 1970-01-01
      • 2014-03-28
      • 2013-07-07
      • 2017-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多