1

このコードでコンパイル エラーが発生する理由を知りたいです。私はJAVAが初めてです。C++ のようにペアのセットを作りたかった内部クラス コードでのペアの意味は何ですか

import java.io.*;
import java.util.Set;

public class UVa {
    public static boolean flag = false;
    public static Integer p0, p1;
    public static Set<pair<Integer,Integer> > sorter;

    public static class pair<first,second>{
        public first First;
        public second Second;
        private pair(first First,second Second){
            this.First = First;
            this.Second = Second;
        }
    }

    public static void main(String[] args) {
        try {
            while (true) {
                p0 = System.in.read();
                p1 = System.in.read();
                sorter.add(pair<p0, p1>); //<<Syntax error on token ">", Expression expected after this token

            }
        } catch (IOException e) {
            System.out.println(e.toString());
        }
    }
}
4

7 に答える 7

5

pair新しいを使用して構築しようとしているようです

pair<p0, p1>

ただし、正しい構文は次のとおりです。

new pair<Integer, Integer>(p0, p1)
于 2012-08-03T09:50:34.030 に答える
3

Set に追加したいのは type のオブジェクトですpair<Integer, Integer>。これらのいずれかを作成するには、newキーワードを使用し、2 つの整数変数p0およびでコンストラクターを呼び出す必要がありp1ます。

sorter.add(new pair<Integer, Integer>(p0,p1));

先頭に大文字を付けてクラスに名前を付けるのが一般的です。Javaジェネリックをより明確pairに使用する方法を示すために、これらの規則を使用して以下のクラスを書き直しました。

public static class Pair<T1,T2>{
    public T1 first;
    public T2 second;
    private pair(T1 first, T2 second){
        this.first = first;
        this.second = second;
    }
}
于 2012-08-03T09:59:18.897 に答える
2

8 行目:

public static Set<pair<Integer,Integer> > sorter;

Set はまだ初期化されていないため、 がスローjava.lang.NullPointerException されます。そのため、次のように最初に初期化する必要があります。

public static Set<pair<Integer,Integer> > sorter = new HashSet<UVa.pair<Integer,Integer>>();

そして25行目では、あなたがやっているようにセット
に追加しようとしていますpair<p0, p1>

 sorter.add(pair<p0, p1>); 

しかし、それは正しい構文ではありません。正しい構文は .

sorter.add(new pair<Integer, Integer>(p0, p1));

また

sorter.add(new pair(p0, p1))
于 2012-08-03T09:53:51.143 に答える
1

コードを変更しました:

 pair p= new pair<Integer, Integer>(p0, p1);
            sorter.add(p); //<<Syntax error on token ">", Expression expected after this token
于 2012-08-03T09:52:22.203 に答える
0

すべきではない

sorter.add(pair<p0, p1>);

読んだ

sorter.add(new pair(p0, p1));
于 2012-08-03T09:51:13.257 に答える
0

あなたのソースでpair<p0, p1>は、ステートメントsorter.add(pair<p0, p1>);で type を参照していpairます。セットに追加するオブジェクトを実際に作成しているわけではありません。あなたも書いたかもしれませんsorter.add(int);

于 2012-08-03T09:51:41.900 に答える
0

Java へようこそ。Java は C++ ですが、プログラミング スタイルは少し異なります。以下を試してください。コンパイルを取得pairすることは、最初の問題にすぎません。;)

public class UVa {
    public static void main(String... args) {
        Scanner scanner = new Scanner(System.in);

        List<Pair<Integer, Integer>> sorter = new ArrayList<>();
        while (scanner.hasNext()) {
            int p0 = scanner.nextInt();
            int p1 = scanner.nextInt();
            sorter.add(Pair.of(p0, p1));
            scanner.nextLine();
        }

        Collections.sort(sorter, new Comparator<Pair<Integer, Integer>>() {
            @Override
            public int compare(Pair<Integer, Integer> o1, Pair<Integer, Integer> o2) {
                int cmp = Integer.compare(o1.first, o2.first);
                if (cmp == 0)
                    cmp = Integer.compare(o1.second, o2.second);
                return cmp;
            }
        });
        for (Pair<Integer, Integer> pair : sorter) {
            System.out.println(pair);
        }
    }
}

class Pair<First, Second> {
    public final First first;
    public final Second second;

    public Pair(First first, Second second) {
        this.first = first;
        this.second = second;
    }

    public static Pair<Integer, Integer> of(int i, int j) {
        return new Pair<Integer, Integer>(i, j);
    }

    @Override
    public String toString() {
        return "Pair{" +
                "first=" + first +
                ", second=" + second +
                '}';
    }
}
于 2012-08-03T10:01:22.963 に答える