Я понимаю, что это странные вопросы, а не мой обычный стиль. В настоящее время я делаю проект с использованием реализации аккордов в peersim. В приведенном ниже коде показано большое целое число и выполняются некоторые операции с ним. Мой chordId
- это хеш объекта, зачем вам использовать add()
? какой цели это служит?
BigInteger base;
if (j == 0)
base = BigInteger.ONE;
else {
base = BigInteger.valueOf(2);
for (int exp = 1; exp < j; exp++) {
base = base.multiply(BigInteger.valueOf(2));
}
}
BigInteger pot = cp.chordId.add(base);
До его аккорда Id был просто случайным целым числом бездействия, которое было 128 бит.
Поэтому мой вопрос: какой фрагмент кода выше add()
используется для ???
[EDIT]
Чтобы немного прояснить этот вопрос:
cp.fingerTable[j] = findId(pot, 0, Network.size() - 1);
Вызывается
, который пытается найти Id of Pot, однако он всегда возвращает ошибку, поскольку созданный в этом методе chordId не существует. Я не уверен, что заменить горшок или вынуть его полностью.
[EDIT2]
findId
выглядит так (это не мой код, поэтому мое замешательство :))
public Node findId(BigInteger id, int nodeOne, int nodeTwo) {
if (nodeOne >= (nodeTwo - 1))
return Network.get(nodeOne);
int middle = (nodeOne + nodeTwo) / 2;
if (((middle) >= Network.size() - 1))
System.out.print("ERROR: Middle is bigger than Network.size");
if (((middle) <= 0))
return Network.get(0);
try {
BigInteger newId = ((ChordProtocol) ((Node) Network.get(middle))
.getProtocol(pid)).chordId;
BigInteger lowId;
if (middle > 0)
lowId = ((ChordProtocol) ((Node) Network.get(middle - 1))
.getProtocol(pid)).chordId;
else
lowId = newId;
BigInteger highId = ((ChordProtocol) ((Node) Network
.get(middle + 1)).getProtocol(pid)).chordId;
if (id.compareTo(newId) == 0
|| ((id.compareTo(newId) == 1) && (id.compareTo(highId) == -1))) {
return Network.get(middle);
}
if ((id.compareTo(newId) == -1) && (id.compareTo(lowId) == 1)) {
if (middle > 0)
return Network.get(middle - 1);
else
return Network.get(0);
}
if (id.compareTo(newId) == -1) {
return findId(id, nodeOne, middle);
} else if (id.compareTo(newId) == 1) {
return findId(id, middle, nodeTwo);
}
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}