0

DVDコレクションと呼ばれるクラスと、映画と呼ばれる別のクラスがあります。返そうとする配列のメソッドは次のようになります。

public class DVDCollection
{
  public static DVD[] collection;
  public static void searchForDVD( String DVD[], String a) {
    System.out.println("What DVD would you like to search for?");
    Scanner scan = new Scanner(System.in);

    a = scan.nextLine();
    int N = DVD.length;
    for (int i = 1; i < N; i++)
      for (int j = i; j > 0; j--)
      if (DVD[j-1].compareTo(DVD[j]) > 0)
      change(DVD, j, j-1);
    else break;
    for (int i = 0; i < DVD.length; i++) {
      System.out.print(DVD[i] + a);
    }
    System.out.println();
  }
}

そして、次のようにメインメソッドから呼び出そうとしています:

public class Movies
{
  public static void main (String[] args)
  {
    DVDCollection movies = new DVDCollection();
    movies.searchForDVD(DVD);
  }
} 

しかし、シンボルが見つからないというエラーが表示されます-変数DVD

では、ここでの問題は正確には何ですか?

4

5 に答える 5

5

あなたが呼んでいる

movies.searchForDVD(DVD);

ただしDVD、main メソッドには変数が定義されていません。ところで、1 つあったとしても、searchForDVD()メソッドは 1 つだけでなく 2 つの引数を取ります。

searchForDVD()メソッドが静的であることにも注意してください。したがって、それを呼び出すために DVDCollection のインスタンスは必要ありません。それ以外の

DVDCollection movies = new DVDCollection();
movies.searchForDVD(...);

あなたが使用する必要があります

DVDCollection.searchForDVD(...);
于 2013-02-26T22:41:33.643 に答える
0

メインメソッドでメソッドを呼び出すときsearchForDVDは、dvdの文字列の配列とdvdの名前を文字列として渡す必要があります。

現時点では、mainメソッドのどこにも宣言していない変数DVDを渡しています。

mainメソッドのコードは次のようになります。

String[] dvds = new String[] {"firstDVD","secondDVD","thirdDVD");
String movie = "secondDVD";
DVDCollection.searchForDVD(dvds,movie);
于 2013-02-26T22:42:33.293 に答える
0

このコードでDVDを数回呼び出しています。ここでの間違いは変数名だと思います。

public static DVD[] collection;コレクションと呼ばれるDVDオブジェクトの配列を定義しました。変数名はcollectionであり、それは変数を参照するときに使用する必要があるものです。

すなわち:collection.lengthDVD.lengthの代わりに。

あなたが言うときpublic static DVD[] collection;、あなたはあなたにコレクションと呼ばれるDVDオブジェクトのパブリックで静的な配列を作成するようにコンパイラに指示しています。ある時点で、この配列を初期化する必要があります。配列は次の形式で初期化されます。

DVD[] collection = new DVD[];

またはString[]arrayOfStrings = {"a"、 "b"、 "c"、 "d"};

もう1つの問題は、メソッドが次のように定義されていることです。

public static void searchForDVD( String DVD[], String a) 

このメソッドには、1つではなく2つの引数が必要です。「DVD」と呼ばれるString[]配列を要求しようとしている場合は、次のように宣言する必要があります。

public static void searchForDVD( String[] DVD, String a)

その宣言は、このメソッドが文字列の配列を取り、それをDVDと呼び、別の文字列と呼びます。

変数の種類と変数名を必ずメモしてください。タイプはJavaに変数に何を期待するかを指示し、名前はそれにアクセスする方法です。

String myString = "string data";

文字列はタイプです。myStringは変数名です。「文字列データ」は、変数に割り当てられた値です。

于 2013-02-26T22:43:32.107 に答える
0

問題1

movies.searchForDVD(DVD);

パラメータDVDが定義されていません。

問題2

public static void searchForDVD(...)はクラスの静的メソッドであり、オブジェクトはDVDCollection必要DVDCollection.searchForDVD(...)ありません。movie

于 2013-02-26T22:44:06.783 に答える
0

私にとって理にかなっているのは次のようなものです:

public class Movies
{
    public static void main (String[] args)
    {
        DVDCollection movies = new DVDCollection();

        //create an Add function inside DVDCollection which reads lines from a text file into collection
        movies.Add("list_of_movies.txt");

        // no arguments are needed here imo, just have it print to user to ask for a DVD to search and then search the collection
        movies.searchForDVD();
    }
}

public class DVDCollection
{
    public DVD[] collection;
    public void Add(string file)
    {
      // parse file and add contents to collection
    }
    public void searchForDVD()
    {
        System.out.println("What DVD would you like to search for?");
        Scanner scan = new Scanner(System.in);
        a = scan.nextLine();
        int N = DVD.length;
        for (int i = 1; i < N; i++)
           for (int j = i; j > 0; j--)
              if (DVD[j-1].compareTo(DVD[j]) > 0)
                 change(DVD, j, j-1);
              else break;
        for (int i = 0; i < DVD.length; i++)
        {
           System.out.print(DVD[i] + a);
        }
        System.out.println();
     }
}
于 2013-02-26T22:55:21.687 に答える