A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Alexander 中级黑马   /  2014-3-18 19:36  /  2190 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

问题是这样的:
把以下IP存入一个txt文件,编写程序把这些IP按数值大小,从小到达排序并打印出来。
61.54.231.245
61.54.231.9
61.54.231.246
61.54.231.48
61.53.231.249


打印出来的结果为:

61.53.231.249
61.54.231.9
61.54.231.48
61.54.231.245
61.54.231.246


我比较IP大小的函数是自己写的

public static int compare(String s1, String s2) {
                 //s1和s2是两个对比的IP值
                //将s1和s2中的字符串按点号"."分离,并赋给sp1,sp2
                String[] sp1 = s1.split("\\.");
                String[] sp2 = s2.split("\\.");
                int in1 = 0, in2 = 0;
                for(int i=0; i<sp1.length; i++) {
                        //将sp1和sp2中的字符串变成int类型,方便比较
                        in1 = Integer.parseInt(sp1[i]);
                        in2 = Integer.parseInt(sp2[i]);
                        if(in1 > in2) {
                                //如果sp1大于sp2则返回1
                                return 1;
                        } else if(in1 < in2) {
                                //小于则返回-1
                                return -1;
                        }
                }
                //否则返回0,表示相等
                return 0;
        }


本来是想实现Comparable接口,重写compareTo()方法,来给IP判断大小的
但是对着个用的不熟,不知道怎么实现,不知道哪位高手能写出来

3 个回复

倒序浏览
public int compare(String s1, String s2) {
                  //s1和s2是两个对比的IP值
                //将s1和s2中的字符串按点号"."分离,并赋给sp1,sp2
                 String[] sp1 = s1.split("\\.");
                 String[] sp2 = s2.split("\\.");
                 for(int i=0; i<sp1.length; i++) {
                         //将sp1和sp2中的字符串变成int类型,方便比较
                       int x = Integer.parseInt(sp1[i]) - Integer.parseInt(sp2[i]);
                         if(x!=0) {
                                 return x;
                         }
                 }
                 //否则返回0,表示相等
                return 0;
         }

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
实现集合元素自身比较性,compareTo()算法与前面的相同,格式改一下就可以了~
import java.util.Iterator;
import java.util.TreeSet;
public class IpTest {
        public static void main(String[] args) {
                TreeSet ts=new TreeSet();
                ts.add(new IpAdress("61.54.231.245"));
                ts.add(new IpAdress("61.54.231.9"));
                ts.add(new IpAdress("61.54.231.246"));
                ts.add(new IpAdress("61.54.231.48"));
                ts.add(new IpAdress("61.53.231.249"));
               
                Iterator it=ts.iterator();
                while(it.hasNext()){
                        IpAdress ip=(IpAdress)it.next();
                        ip.Show();       
                }

        }

}
class IpAdress implements Comparable{
       
        private String adress;
        public IpAdress(String adress){
                this.adress=adress;
        }
        public int compareTo(Object obj) {
                if(!(obj instanceof IpAdress)){
                        throw new RuntimeException("不是IP地址");
                }
                IpAdress p=(IpAdress)obj;
                String[] sp1=this.adress.split("\\.");
                String[] sp2=p.adress.split("\\.");
                for(int i=0;i<sp1.length;i++){
                        int x=Integer.parseInt(sp1[i])-Integer.parseInt(sp2[i]);
                        if(x!=0){
                                return x;
                        }
                }
                return 0;
               
        }
        public void Show(){
                System.out.println(adress);
        }
       
}
运行结果就是:
61.53.231.249
61.54.231.9
61.54.231.48
61.54.231.245
61.54.231.246

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
chen_x 发表于 2014-3-18 23:19
实现集合元素自身比较性,compareTo()算法与前面的相同,格式改一下就可以了~
import java.util.Iterator;
...

恩,谢谢,跟我想要的很符合
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马