我想知道为什么这段代码会出现编译错误。我是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());
}
}
}
答案 0 :(得分:4)
您似乎正在尝试使用
构建新的pair
pair<p0, p1>
但是,正确的语法是
new pair<Integer, Integer>(p0, p1)
答案 1 :(得分:3)
要添加到Set中的是pair<Integer, Integer>
类型的对象。要创建其中一个,您需要使用new
关键字,并使用两个整数变量p0
和p1
调用构造函数。
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 +
'}';
}
}