我在下面的代码段中遇到了问题,并且已经将它缩小了很多,但需要专家的注意才能解释它为什么会中断。在If和Else中定义变量,java
下面的代码是图论问题的一部分,节点(宇航员)与边(给出)一起给出,结果图中有多个未连接的子图。我正在解决的问题不需要将不连接的节点创建为对象。
我通过迭代输入中提供的每个配对名称(整数)来创建单个节点。然后将这些节点对象提供给Edge对象的构造函数。 为了确保我不会创建相同节点的重复项,我创建了一个列表来检查节点的名称(int)尚未给出。 如果尚未提供节点名称,则会创建一个新节点作为变量A或B. 如果名称HAS已被提供,则循环将查找现有节点对象并将其分配给占位符变量A或B.
我得到了3至最后一行编译时错误(在Hackerrank.com编辑工作)下面的代码:
“错误:无法找到符号 配对P =新的配对(A,B ); ^ 符号:变量A“ (对于两个变量A & B此错误发生相同,此处仅显示一条错误消息) 我知道声明/选择变量A & B的if(){} else {}部分引入了此错误,但是我的代码需要if/else检查。
有人可以解释为什么下面的代码抛出这个错误,或建议替代方法来解决这个问题?非常感谢!
public static void main(String[] args) throws Exception {
//...
ArrayList<Pairing> allPairings = new ArrayList<>(0);
ArrayList<Astronaut> allAstronauts = new ArrayList<>(0);
ArrayList<Integer> givenInts = new ArrayList<>(0);
for (int i = 0; i < I; i++) {
temp = bfr.readLine().split(" ");
int a = Integer.parseInt(temp[0]);
int b = Integer.parseInt(temp[1]);
// Check values against list to see if they have been given before
if (!(givenInts.contains(a))) {
Astronaut A = new Astronaut(a);
allAstronauts.add(A);
} else {
// Check all current astronauts for same name
for (int t = 0; t < allAstronauts.size(); t++) {
if (allAstronauts.get(t).getName() == a) {
Astronaut A = allAstronauts.get(t);
}
}
}
if (!(givenInts.contains(b))) {
Astronaut B = new Astronaut(b);
allAstronauts.add(B);
} else {
// Check all current astronauts for same name
for (int r = 0; r < allAstronauts.size(); r++) {
if (allAstronauts.get(r).getName() == b) {
Astronaut B = allAstronauts.get(r);
}
}
}
givenInts.add(a);
givenInts.add(b);
Pairing P = new Pairing(A,B);
allPairings.add(P);
}
您需要首先声明,它在您需要的范围内。 – SLaks
你为什么重新定义变量? – Li357
感谢您的回答,我可以通过在不同部分定义变量来解决问题,但我不确定我是否明白为什么会出现问题。 代码工作完美的很好地循环回来相同的“宇航员A =新宇航员(输入);多次,只有当它被包含在if/else语句中时失败: -/ –