0

リンク リストを操作する 3 つのメソッドを作成する課題があります。指示では、次のコンストラクターを使用するように指示されています。

 public MyList (LinkedList<Integer> list) {
 ...
 }

ただし、どのように統合しようとしても、Eclipse は私のコードを気に入らないようです。これが私の現在の試みです:

import java.util.*;

public class ListClass {

public static void main(String[] args) {
    LinkedList<Integer> list = new LinkedList<Integer>();
    list.add(10);
    list = MyList(list);
}

public MyList (LinkedList<Integer> list){
    LinkedList<Integer> r = list;
    return r;
}
}

上記の MyList コンストラクターは、入力されたリストを返すだけで問題ないと思っていましたが、私の Java スキルは本当に貧弱です。チュートリアルを行ってこれを試してみましたが、思ったほどうまくいきませんでした。

とにかく、Eclipseは私に2つのエラーを与えています-「list = MyLIst(list);」で 行には、メソッドMyListがListClassに対して未定義であると書かれており、「public MyList」行には「メソッドの戻り値の型がありません」と書かれていますが、rはリンクリストであり、それを返すように伝えました。

これは私の脳を傷つけ、私はそれを理解することができません. 誰か私に手を差し伸べてくれますか? 上記のコードを機能させることができれば、残りをソートできるはずです。

新しいコード

正しく指摘されているように、私のクラス名は想定されるコンストラクター名と同じではありません。したがって、調整されたコードは次のとおりです。

import java.util.LinkedList;

public class MyList {

public static void main(String[] args) {
    LinkedList<Integer> list = new LinkedList<Integer>();
    list.add(10);
    list.add(-20);
    MyList(list);
}

public MyList(LinkedList<Integer> list) {
    LinkedList<Integer> newList = list;
    System.out.println(newList);    
}
}

これで「戻り値の型」エラーは解決しました (ありがとうございます)。ただし、まだ「未定義」エラーが発生しています。

4

4 に答える 4

2

もしも

public MyList (LinkedList<Integer> list) {
 ...
}

はコンストラクターであると想定されているため、クラスにも名前を付ける必要がありますMyList。コンストラクターからは何も返すことができないため、コンストラクターの宣言はそのままにしておいてください。

クラスの名前を変更LinkedListし、上記のコンストラクターのプライベート フィールドに保存してから、実装するメソッドをMyListクラスに追加します。

未定義の問題を取り除くには、'new' を使用してリストを作成する必要があります。

MyList myList  = new MyList(list);
于 2012-08-21T14:16:34.737 に答える
2

メソッドの宣言に欠けているのは、メソッドMyListの戻り値の型です。

public MyList (LinkedList<Integer> list)

次のようなものでなければなりません

public LinkedList<Integer> MyList (LinkedList<Integer> list)

それに加えて、メソッド名の通常の規則はキャメルケースですが、小文字で始まります. 私はmyList代わりにそれを呼び出しMyListます(メソッドの目的が何であるかを反映するメソッドのより良い名前を選択する必要があります)。

于 2012-08-21T14:15:29.010 に答える
1

変更したコードでは、まだ修正すべきことがいくつかあります。

  1. Javaでは、新しいオブジェクトを作成するためにコンストラクターを呼び出します。main()'undefined'エラーを防ぐために、メソッドの一部としてこのオブジェクトを作成するときに、次のようなものを使用して、このオブジェクトを保持することをお勧めします。

    MyList ml = new MyList(list);
    
  2. コンストラクターの一部として、LinkedList<Integer>渡されたものをローカル変数としてのみ保存し、クラス変数としては保存しません。クラスの先頭にある次の宣言でこれを修正してください。

    public class MyList {
        private LinkedList<Integer> list;
        //...
    

追加機能の構造

以下のコメントで説明されているように追加機能を追加するために、次の種類の構造を使用します(明らかに、メソッドを実装する必要がありますが、どこに配置するかを確認できます)。

import java.util.LinkedList;

public class MyList {
    private LinkedList<Integer> list;

    public MyList(LinkedList<Integer> list) {
        this.list = list;
    }

    public LinkedList<Integer> reverse() {
        //Create a reversed list

        return rList;
    }

    public LinkedList<Integer> odd() {
        //Create a list of the odd elements

        return oddList
    }

    public LinkedList<Integer> even() {
        //Create a list of the even elements

        return evenList;
    }

    @Override
    public String toString() {
        return list.toString();
    }

    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<Integer>();
        list.add(0);
        list.add(2);
        list.add(4);

        MyList ml = new MyList(list);
        System.out.println("MyList: " + ml);
        LinkedList<Integer> tsil = ml.reverse();
        System.out.println("Reversed: " + tsil);
        LinkedList<Integer> ls = ml.odd();
        System.out.println("Odd: " + ls);
        LinkedList<Integer> it = ml.even();
        System.out.println("Even: " + it);
    }
} 
于 2012-08-21T14:45:37.633 に答える
1

ここでの問題は、コンストラクターがそれを囲むクラスと同じ名前でなければならないことです。ただし、ListClass という名前のクラス内で MyList コンストラクターに名前を付けようとしています。

したがって、クラスとコンストラクターの両方に MyList という名前を付けるか、それらに ListClass という名前を付けます。

「未定義」の問題に関しては、コンストラクターを直接呼び出すことはできません。クラスの新しいインスタンスを作成するために使用されるため、「new」ステートメントで使用する必要があります。

MyList someList = new MyList(); // variable someList will hold a new MyList instance

また

new MyList(); // instance without a reference variable.
于 2012-08-21T14:17:10.927 に答える