我正在上一所 IT 学校,我们刚开始学习 JAVA,我们必须做一个项目,模拟简单的“消息”在具有 IP 地址的节点网络中传递。
就这个问题而言,整个项目并不重要。
我们有一个 IPAddress 类,它的一个方法是比较三个 IP 地址对象并判断第一个是否在另外两个的“范围内”。
例如,让我们在系统中有一个节点,将其命名为 N1(有一个完整的节点类,但这并不重要),并有一个包含“Hello”消息的包(也是它自己的类)。
该软件包的 IP 地址为 127.0.0.1
系统想要将它传递给 N1,它有一个 IP 地址(不相关)和一个 IP 地址范围(显示它处理的 IP 范围)
127.0.0.0(下限)和 127.0.0.255(上限)
IPAddress 类的 InsideRange 方法接收两个 IP 作为参数,以通过以下方式将其与第三个进行比较:
public boolean insideRng(IPAddress lower, IPAddress upper){
String this_str = this.toString();
String lower_str = lower.toString();
String upper_str = upper.toString();
String[] addressses = {this_str, lower_str, upper_str};
for (int i=0; i<addressses.length; i++){
String[] tmp = addressses[i].split("\\.");
addressses[i] = String.format("%3s.%3s.%3s.%3s",tmp[0],tmp[1],tmp[2],tmp[3]);
}
String address = addressses[0];
Arrays.sort(addressses);
return (addressses[1].equals(address));
}
在这种情况下,127.0.0.1 位于 127.0.0.0 和 127.0.0.255 内,因此它返回 true。
但是我没有制作上面的代码,我请朋友帮助我。原因是我的版本不能正常工作(它有时会为超出下限或上限的 IP 返回 true):
public boolean insideRng(IPAddress lower, IPAddress upper){ //nem mukodott
String lower_str = lower.toString();
String upper_str = upper.toString();
String this_str = this.toString();
return (lower_str.compareTo(this_str) <= 0 & upper_str.compareTo(this_str) >= 0);
} //(This is my version. THIS DOES NOT WORK)
我的问题是,为什么我的不工作?和:
这部分做什么以及为什么需要 for 循环
for (int i=0; i<addressses.length; i++){
String[] tmp = addressses[i].split("\\.");
addressses[i] = String.format("%3s.%3s.%3s.%3s",tmp[0],tmp[1],tmp[2],tmp[3]);
}
如果我只是去,为什么它不起作用:
public boolean insideRng(IPAddress lower, IPAddress upper){
String this_str = this.toString();
String lower_str = lower.toString();
String upper_str = upper.toString();
String[] addressses = {this_str, lower_str, upper_str};
String address = addressses[0]; //address = "127.0.0.1";
Arrays.sort(addressses);
return (addressses[1].equals(address));
}
(toString() 方法不调用字符串上使用的原始 java toString 方法,而是 IPadddress 有一个覆盖的 toString() 方法,我将在此处粘贴:)
@Override
public String toString(){
StringBuilder a = new StringBuilder();
for(int i = 0; i < this.address.length -1; ++i){
a.append(this.address[i]).append(".");
}
a.append(address[address.length-1]);
return a.toString();
}