求助...遇到了些逻辑上的问题

zzh960213 2018-03-02 03:20:11
                List<String> ipAddrs = createVPNService.getAllUsedIPs();//查询数据库中所有IP网段

String[] ips = ipAddrs.toArray(new String[0]);// List转成数组

//对查询出的IP地址进行排序
ips = IPAddressSort.fill(ips);//先填充ip地址,前面补0
Arrays.sort(ips);//调用Arrays里的sort(Object[] o)方法进行排序
ips = IPAddressSort.recovery(ips);//回复ip地址,去除补上的0

String startIP = myconfig.getStartIP();
String endIP = myconfig.getEndIP();
List ipAddress = IPAddressTraversal.getIPs(startIP, endIP);//遍历出区间内所有IP

for (int i = 0; i < ips.length; i++) {
for (int j = 0; j < ipAddress.size(); j++) {
if (!ips[i].equals(ipAddress)) {

break;
}
}
break;
}


思路是这样的:1、数据库中查询出目前所有已存在的IP,然后进行排序

2.和172.16.50.1-172.16.51.254遍历好的进行比对,第一个不相同的就插入


怎样取出第一个不相同的?试了半天,头都大了,可能是我还没理解
求助各位大佬了!!!
...全文
594 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
HumbertC 2018-03-02
  • 打赏
  • 举报
回复
引用 17 楼 cgd125633600 的回复:
[quote=引用 13 楼 zzh960213 的回复:] [quote=引用 11 楼 cgd125633600 的回复:] [quote=引用 9 楼 zzh960213 的回复:] [quote=引用 7 楼 cgd125633600 的回复:] 你第一次父循环完就给你break掉了
所以,我要怎么做?想了好几个小时了,现在脑子非常不清醒,还请老哥明说[/quote] 你的需求我没看懂- - 至少你这个循环肯定不是这么写的,既然第一次就break掉了那为何还需要套一个父循环呢 你的需求是不是例如 模板数组是数字1-10 入参是随机数字 比对模板数组和入参数组 第一个不同的数字,比如11,就输出11,然后就结束了?[/quote] 需求就是我数据库中存储有两个不同的网段, 172.16.50.xxx 172.16.51.xxx 全部拿出来以后做个排序,然后跟我用代码生成的从172.16.50.1 一直到 172.16.51.254 中间所有的遍历出来 然后数据库中查询出来排序好的,和代码生成的做一个比对,例如,我数据库中存有两个 172.16.50.3 172.16.50.4 对比以后我要把172.16.50.1拿出来存进去 下次在插入就是172.16.50.2 然后在插入是172.16.50.5 以此类推[/quote] 那就很简单了,你父循环对象选错了,你永远在拿你数据库里的.3在跟生成的.1做对比[/quote] 说错了,是在拿.3,.4,在跟.1做对比
HumbertC 2018-03-02
  • 打赏
  • 举报
回复
引用 13 楼 zzh960213 的回复:
[quote=引用 11 楼 cgd125633600 的回复:] [quote=引用 9 楼 zzh960213 的回复:] [quote=引用 7 楼 cgd125633600 的回复:] 你第一次父循环完就给你break掉了
所以,我要怎么做?想了好几个小时了,现在脑子非常不清醒,还请老哥明说[/quote] 你的需求我没看懂- - 至少你这个循环肯定不是这么写的,既然第一次就break掉了那为何还需要套一个父循环呢 你的需求是不是例如 模板数组是数字1-10 入参是随机数字 比对模板数组和入参数组 第一个不同的数字,比如11,就输出11,然后就结束了?[/quote] 需求就是我数据库中存储有两个不同的网段, 172.16.50.xxx 172.16.51.xxx 全部拿出来以后做个排序,然后跟我用代码生成的从172.16.50.1 一直到 172.16.51.254 中间所有的遍历出来 然后数据库中查询出来排序好的,和代码生成的做一个比对,例如,我数据库中存有两个 172.16.50.3 172.16.50.4 对比以后我要把172.16.50.1拿出来存进去 下次在插入就是172.16.50.2 然后在插入是172.16.50.5 以此类推[/quote] 那就很简单了,你父循环对象选错了,你永远在拿你数据库里的.3在跟生成的.1做对比
zzh960213 2018-03-02
  • 打赏
  • 举报
回复
引用 10 楼 xiongdejun 的回复:
[quote=引用 8 楼 zzh960213 的回复:] [quote=引用 6 楼 xiongdejun 的回复:] [quote=引用 5 楼 zzh960213 的回复:] [quote=引用 4 楼 xiongdejun 的回复:] [quote=引用 3 楼 zzh960213 的回复:] [quote=引用 2 楼 xiongdejun 的回复:] for (int i = 0; i < ips.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ips[i].equals(ipAddress[j])) { //不同的 break; } } break; }
谢谢,这一步我想到了,我现在就是郁闷,if判断里要怎么写,会出现作用域不同的问题[/quote] 作用域?没有明白什么意思 [/quote] for (int i = 0; i < ipArray.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ipArray[i].equals(ipAddress.get(j))) { System.out.println(ipAddress.get(i)); break; } } break; } 如果判断里这样写的话,输出的结果是从172.16.50.1开始,而我数据库中存储的是172.16.50.1、172.16.50.2 所以我判断是因为作用域的问题[/quote] for (int i = 0; i < ipArray.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ipArray[i].equals(ipAddress.get(j))) { System.out.println(ipAddress.get(i)); break; } } // break;去掉这个否则匹配不完的 }[/quote] 这个break不能去掉,去掉的话,我数据库中有几条记录。控制台就从1开始打印几条[/quote] 可能是我理解有问题吧 看了好一会 我才理解你什么意思 int num=0; for (int i = 0; i < ipArray.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ipArray[i].trim().equals(ipAddress.get(j).trim())) { System.out.println(ipAddress.get(i)); num++; break; } } // break;去掉这个否则匹配不完的 if(num==1){ break; } } 你加上.trim() 匹配错误的话 我估计应该是有空格 或者说你把两个都遍历出来 看看一样的结果他们俩是不是有什么区别[/quote] 输出的那里永远都是172.16.50.1 而我数据库中1已经有了,就是卡在这一点了
xiongdejun 2018-03-02
  • 打赏
  • 举报
回复
引用 12 楼 zzh960213 的回复:
[quote=引用 10 楼 xiongdejun 的回复:] [quote=引用 8 楼 zzh960213 的回复:] [quote=引用 6 楼 xiongdejun 的回复:] [quote=引用 5 楼 zzh960213 的回复:] [quote=引用 4 楼 xiongdejun 的回复:] [quote=引用 3 楼 zzh960213 的回复:] [quote=引用 2 楼 xiongdejun 的回复:] for (int i = 0; i < ips.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ips[i].equals(ipAddress[j])) { //不同的 break; } } break; }
谢谢,这一步我想到了,我现在就是郁闷,if判断里要怎么写,会出现作用域不同的问题[/quote] 作用域?没有明白什么意思 [/quote] for (int i = 0; i < ipArray.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ipArray[i].equals(ipAddress.get(j))) { System.out.println(ipAddress.get(i)); break; } } break; } 如果判断里这样写的话,输出的结果是从172.16.50.1开始,而我数据库中存储的是172.16.50.1、172.16.50.2 所以我判断是因为作用域的问题[/quote] for (int i = 0; i < ipArray.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ipArray[i].equals(ipAddress.get(j))) { System.out.println(ipAddress.get(i)); break; } } // break;去掉这个否则匹配不完的 }[/quote] 这个break不能去掉,去掉的话,我数据库中有几条记录。控制台就从1开始打印几条[/quote] 可能是我理解有问题吧 看了好一会 我才理解你什么意思 int num=0; for (int i = 0; i < ipArray.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ipArray[i].trim().equals(ipAddress.get(j).trim())) { System.out.println(ipAddress.get(i)); num++; break; } } // break;去掉这个否则匹配不完的 if(num==1){ break; } } 你加上.trim() 匹配错误的话 我估计应该是有空格 或者说你把两个都遍历出来 看看一样的结果他们俩是不是有什么区别[/quote] 谢谢,我再试试[/quote] 可以了吗?不行还可以在处理
zzh960213 2018-03-02
  • 打赏
  • 举报
回复
引用 11 楼 cgd125633600 的回复:
[quote=引用 9 楼 zzh960213 的回复:] [quote=引用 7 楼 cgd125633600 的回复:] 你第一次父循环完就给你break掉了
所以,我要怎么做?想了好几个小时了,现在脑子非常不清醒,还请老哥明说[/quote] 你的需求我没看懂- - 至少你这个循环肯定不是这么写的,既然第一次就break掉了那为何还需要套一个父循环呢 你的需求是不是例如 模板数组是数字1-10 入参是随机数字 比对模板数组和入参数组 第一个不同的数字,比如11,就输出11,然后就结束了?[/quote] 需求就是我数据库中存储有两个不同的网段, 172.16.50.xxx 172.16.51.xxx 全部拿出来以后做个排序,然后跟我用代码生成的从172.16.50.1 一直到 172.16.51.254 中间所有的遍历出来 然后数据库中查询出来排序好的,和代码生成的做一个比对,例如,我数据库中存有两个 172.16.50.3 172.16.50.4 对比以后我要把172.16.50.1拿出来存进去 下次在插入就是172.16.50.2 然后在插入是172.16.50.5 以此类推
xiongdejun 2018-03-02
  • 打赏
  • 举报
回复
引用 15 楼 zzh960213 的回复:
[quote=引用 10 楼 xiongdejun 的回复:] [quote=引用 8 楼 zzh960213 的回复:] [quote=引用 6 楼 xiongdejun 的回复:] [quote=引用 5 楼 zzh960213 的回复:] [quote=引用 4 楼 xiongdejun 的回复:] [quote=引用 3 楼 zzh960213 的回复:] [quote=引用 2 楼 xiongdejun 的回复:] for (int i = 0; i < ips.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ips[i].equals(ipAddress[j])) { //不同的 break; } } break; }
谢谢,这一步我想到了,我现在就是郁闷,if判断里要怎么写,会出现作用域不同的问题[/quote] 作用域?没有明白什么意思 [/quote] for (int i = 0; i < ipArray.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ipArray[i].equals(ipAddress.get(j))) { System.out.println(ipAddress.get(i)); break; } } break; } 如果判断里这样写的话,输出的结果是从172.16.50.1开始,而我数据库中存储的是172.16.50.1、172.16.50.2 所以我判断是因为作用域的问题[/quote] for (int i = 0; i < ipArray.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ipArray[i].equals(ipAddress.get(j))) { System.out.println(ipAddress.get(i)); break; } } // break;去掉这个否则匹配不完的 }[/quote] 这个break不能去掉,去掉的话,我数据库中有几条记录。控制台就从1开始打印几条[/quote] 可能是我理解有问题吧 看了好一会 我才理解你什么意思 int num=0; for (int i = 0; i < ipArray.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ipArray[i].trim().equals(ipAddress.get(j).trim())) { System.out.println(ipAddress.get(i)); num++; break; } } // break;去掉这个否则匹配不完的 if(num==1){ break; } } 你加上.trim() 匹配错误的话 我估计应该是有空格 或者说你把两个都遍历出来 看看一样的结果他们俩是不是有什么区别[/quote] 输出的那里永远都是172.16.50.1 而我数据库中1已经有了,就是卡在这一点了[/quote] 反正我现在没事 你加我qq14010727 我给你调
zzh960213 2018-03-02
  • 打赏
  • 举报
回复
引用 10 楼 xiongdejun 的回复:
[quote=引用 8 楼 zzh960213 的回复:] [quote=引用 6 楼 xiongdejun 的回复:] [quote=引用 5 楼 zzh960213 的回复:] [quote=引用 4 楼 xiongdejun 的回复:] [quote=引用 3 楼 zzh960213 的回复:] [quote=引用 2 楼 xiongdejun 的回复:] for (int i = 0; i < ips.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ips[i].equals(ipAddress[j])) { //不同的 break; } } break; }
谢谢,这一步我想到了,我现在就是郁闷,if判断里要怎么写,会出现作用域不同的问题[/quote] 作用域?没有明白什么意思 [/quote] for (int i = 0; i < ipArray.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ipArray[i].equals(ipAddress.get(j))) { System.out.println(ipAddress.get(i)); break; } } break; } 如果判断里这样写的话,输出的结果是从172.16.50.1开始,而我数据库中存储的是172.16.50.1、172.16.50.2 所以我判断是因为作用域的问题[/quote] for (int i = 0; i < ipArray.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ipArray[i].equals(ipAddress.get(j))) { System.out.println(ipAddress.get(i)); break; } } // break;去掉这个否则匹配不完的 }[/quote] 这个break不能去掉,去掉的话,我数据库中有几条记录。控制台就从1开始打印几条[/quote] 可能是我理解有问题吧 看了好一会 我才理解你什么意思 int num=0; for (int i = 0; i < ipArray.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ipArray[i].trim().equals(ipAddress.get(j).trim())) { System.out.println(ipAddress.get(i)); num++; break; } } // break;去掉这个否则匹配不完的 if(num==1){ break; } } 你加上.trim() 匹配错误的话 我估计应该是有空格 或者说你把两个都遍历出来 看看一样的结果他们俩是不是有什么区别[/quote] 谢谢,我再试试
HumbertC 2018-03-02
  • 打赏
  • 举报
回复
引用 9 楼 zzh960213 的回复:
[quote=引用 7 楼 cgd125633600 的回复:] 你第一次父循环完就给你break掉了
所以,我要怎么做?想了好几个小时了,现在脑子非常不清醒,还请老哥明说[/quote] 你的需求我没看懂- - 至少你这个循环肯定不是这么写的,既然第一次就break掉了那为何还需要套一个父循环呢 你的需求是不是例如 模板数组是数字1-10 入参是随机数字 比对模板数组和入参数组 第一个不同的数字,比如11,就输出11,然后就结束了?
xiongdejun 2018-03-02
  • 打赏
  • 举报
回复
引用 8 楼 zzh960213 的回复:
[quote=引用 6 楼 xiongdejun 的回复:] [quote=引用 5 楼 zzh960213 的回复:] [quote=引用 4 楼 xiongdejun 的回复:] [quote=引用 3 楼 zzh960213 的回复:] [quote=引用 2 楼 xiongdejun 的回复:] for (int i = 0; i < ips.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ips[i].equals(ipAddress[j])) { //不同的 break; } } break; }
谢谢,这一步我想到了,我现在就是郁闷,if判断里要怎么写,会出现作用域不同的问题[/quote] 作用域?没有明白什么意思 [/quote] for (int i = 0; i < ipArray.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ipArray[i].equals(ipAddress.get(j))) { System.out.println(ipAddress.get(i)); break; } } break; } 如果判断里这样写的话,输出的结果是从172.16.50.1开始,而我数据库中存储的是172.16.50.1、172.16.50.2 所以我判断是因为作用域的问题[/quote] for (int i = 0; i < ipArray.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ipArray[i].equals(ipAddress.get(j))) { System.out.println(ipAddress.get(i)); break; } } // break;去掉这个否则匹配不完的 }[/quote] 这个break不能去掉,去掉的话,我数据库中有几条记录。控制台就从1开始打印几条[/quote] 可能是我理解有问题吧 看了好一会 我才理解你什么意思 int num=0; for (int i = 0; i < ipArray.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ipArray[i].trim().equals(ipAddress.get(j).trim())) { System.out.println(ipAddress.get(i)); num++; break; } } // break;去掉这个否则匹配不完的 if(num==1){ break; } } 你加上.trim() 匹配错误的话 我估计应该是有空格 或者说你把两个都遍历出来 看看一样的结果他们俩是不是有什么区别
zzh960213 2018-03-02
  • 打赏
  • 举报
回复
引用 7 楼 cgd125633600 的回复:
你第一次父循环完就给你break掉了
所以,我要怎么做?想了好几个小时了,现在脑子非常不清醒,还请老哥明说
xiongdejun 2018-03-02
  • 打赏
  • 举报
回复
引用 5 楼 zzh960213 的回复:
[quote=引用 4 楼 xiongdejun 的回复:] [quote=引用 3 楼 zzh960213 的回复:] [quote=引用 2 楼 xiongdejun 的回复:] for (int i = 0; i < ips.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ips[i].equals(ipAddress[j])) { //不同的 break; } } break; }
谢谢,这一步我想到了,我现在就是郁闷,if判断里要怎么写,会出现作用域不同的问题[/quote] 作用域?没有明白什么意思 [/quote] for (int i = 0; i < ipArray.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ipArray[i].equals(ipAddress.get(j))) { System.out.println(ipAddress.get(i)); break; } } break; } 如果判断里这样写的话,输出的结果是从172.16.50.1开始,而我数据库中存储的是172.16.50.1、172.16.50.2 所以我判断是因为作用域的问题[/quote] for (int i = 0; i < ipArray.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ipArray[i].equals(ipAddress.get(j))) { System.out.println(ipAddress.get(i)); break; } } // break;去掉这个否则匹配不完的 }
zzh960213 2018-03-02
  • 打赏
  • 举报
回复
引用 6 楼 xiongdejun 的回复:
[quote=引用 5 楼 zzh960213 的回复:] [quote=引用 4 楼 xiongdejun 的回复:] [quote=引用 3 楼 zzh960213 的回复:] [quote=引用 2 楼 xiongdejun 的回复:] for (int i = 0; i < ips.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ips[i].equals(ipAddress[j])) { //不同的 break; } } break; }
谢谢,这一步我想到了,我现在就是郁闷,if判断里要怎么写,会出现作用域不同的问题[/quote] 作用域?没有明白什么意思 [/quote] for (int i = 0; i < ipArray.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ipArray[i].equals(ipAddress.get(j))) { System.out.println(ipAddress.get(i)); break; } } break; } 如果判断里这样写的话,输出的结果是从172.16.50.1开始,而我数据库中存储的是172.16.50.1、172.16.50.2 所以我判断是因为作用域的问题[/quote] for (int i = 0; i < ipArray.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ipArray[i].equals(ipAddress.get(j))) { System.out.println(ipAddress.get(i)); break; } } // break;去掉这个否则匹配不完的 }[/quote] 这个break不能去掉,去掉的话,我数据库中有几条记录。控制台就从1开始打印几条
HumbertC 2018-03-02
  • 打赏
  • 举报
回复
你第一次父循环完就给你break掉了
zzh960213 2018-03-02
  • 打赏
  • 举报
回复
引用 4 楼 xiongdejun 的回复:
[quote=引用 3 楼 zzh960213 的回复:] [quote=引用 2 楼 xiongdejun 的回复:] for (int i = 0; i < ips.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ips[i].equals(ipAddress[j])) { //不同的 break; } } break; }
谢谢,这一步我想到了,我现在就是郁闷,if判断里要怎么写,会出现作用域不同的问题[/quote] 作用域?没有明白什么意思 [/quote] for (int i = 0; i < ipArray.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ipArray[i].equals(ipAddress.get(j))) { System.out.println(ipAddress.get(i)); break; } } break; } 如果判断里这样写的话,输出的结果是从172.16.50.1开始,而我数据库中存储的是172.16.50.1、172.16.50.2 所以我判断是因为作用域的问题
xiongdejun 2018-03-02
  • 打赏
  • 举报
回复
引用 3 楼 zzh960213 的回复:
[quote=引用 2 楼 xiongdejun 的回复:] for (int i = 0; i < ips.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ips[i].equals(ipAddress[j])) { //不同的 break; } } break; }
谢谢,这一步我想到了,我现在就是郁闷,if判断里要怎么写,会出现作用域不同的问题[/quote] 作用域?没有明白什么意思
zzh960213 2018-03-02
  • 打赏
  • 举报
回复
引用 2 楼 xiongdejun 的回复:
for (int i = 0; i < ips.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ips[i].equals(ipAddress[j])) { //不同的 break; } } break; }
谢谢,这一步我想到了,我现在就是郁闷,if判断里要怎么写,会出现作用域不同的问题
xiongdejun 2018-03-02
  • 打赏
  • 举报
回复
for (int i = 0; i < ips.length; i++) { for (int j = 0; j < ipAddress.size(); j++) { if (!ips[i].equals(ipAddress[j])) { //不同的 break; } } break; }
lier_liujinming 2018-03-02
  • 打赏
  • 举报
回复
弱弱的问一个问题 第16行,ipAddress的类型是一个List啊

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧