成对的一组,编译错误

时间:2012-08-03 09:46:18

标签: java

我想知道为什么这段代码会出现编译错误。我是JAVA的新手。我想在C ++中创建一组对 内部类代码

pair 的含义是什么?
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());
        }
    }
}

7 个答案:

答案 0 :(得分:4)

您似乎正在尝试使用

构建新的pair
pair<p0, p1>

但是,正确的语法是

new pair<Integer, Integer>(p0, p1)

答案 1 :(得分:3)

要添加到Set中的是pair<Integer, Integer>类型的对象。要创建其中一个,您需要使用new关键字,并使用两个整数变量p0p1调用构造函数。

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

使用主要资本命名类是conventional。我已经使用这些约定重写了下面的pair课程,试图更清楚地展示它如何使用Java Generics

public static class Pair<T1,T2>{
    public T1 first;
    public T2 second;
    private pair(T1 first, T2 second){
        this.first = first;
        this.second = second;
    }
}

答案 2 :(得分: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))

答案 3 :(得分:1)

更改了您的代码:

 pair p= new pair<Integer, Integer>(p0, p1);
            sorter.add(p); //<<Syntax error on token ">", Expression expected after this token

答案 4 :(得分:0)

不应该

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

sorter.add(new pair(p0, p1));

答案 5 :(得分:0)

在您的来源中,pair<p0, p1>语句中的sorter.add(pair<p0, p1>);引用类型pair。您实际上并未创建要添加到集合中的对象。你也可以写sorter.add(int);

答案 6 :(得分: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 +
                '}';
    }
}