import java.io.*;

public class ffdg { /** * @param args */ public static void main(String[] args)throws IOException { // TODO Auto-generated method stub String ip; //用于接收要划分的IP
int s; //用于接收以要划分的子网数
int n; //输入子网数对应的二进制位数

    System.out.println('---------------划分子网---------------');  
    //输入要划分的IP地址:ip  
    System.out.println('请输入要划分的IP地址(格式为:x1.x2.x3.x4):');  
    System.out.print('→:');  
    InputStreamReader isr = new InputStreamReader(System.in);  
    BufferedReader br = new BufferedReader(isr);  
    ip = br.readLine();  

    //截取x1  
    int index1 = ip.indexOf('.');  
    String st1 = ip.substring(0,index1);  
    int x1=Integer.parseInt(st1);//把String类型的st转化成int型  

    //截取x2  
    int index2= ip.indexOf('.',index1+1);  
    String st2 = ip.substring(index1+1,index2);  
    int x2=Integer.parseInt(st2);//把String类型的st转化成int型  

    //截取x3  
    int index3= ip.indexOf('.',index2+1);  
    String st3 = ip.substring(index2+1,index3);  
    int x3=Integer.parseInt(st3);//把String类型的st转化成int型  

    //截取x4  
    //A类  
    if(x1>0&&x1<=126){  
        System.out.println('本IP地址能划分划分的最大子网数为: '+((int)Math.pow(2,24-2)-2));  
    }  
    //B类  
    if(x1>=128&&x1<=191){  
        System.out.println('本IP地址能划分划分的最大子网数为: '+((int)Math.pow(2,16-2)-2));  
    }  
    //C类  
    if(x1>=192&&x1<=223){  
        System.out.println('本IP地址能划分划分的最大子网数为: '+((int)Math.pow(2,8-2)-2));  
    }  

    //输入要划分的子网数数:s  
    System.out.println('请输入要划分的子网数:');  
    System.out.print('→:');  

    String subnet_num= br.readLine();  
    s = Integer.parseInt(subnet_num);  
    br.close();  


    //求所输入子网数对应的二进制位数:n  

    for( n=1 ;(Math.pow(2,n)-2)<s;n++);    


    System.out.println('--------------------------------------');  
    //求子网掩码  
    int sum = 0;  
    for(int i=0;i<n;i++){  
        sum = sum +(int)Math.pow(2,(7-i));  
    }  
    System.out.println('子网掩码为:');  
    //A类  
    if(x1>0&&x1<=126){  
        if(n<=8){  
            System.out.println('255.'+sum+'.0.0');  
        }else if(n>8&&n<=16){  
            n = n-8;  
            sum = 0;  
            for(int i=0;i<n;i++){  
                sum = sum +(int)Math.pow(2,(7-i));  
            }  
            System.out.println('255.255.'+sum+'.0');  
        }else{  
            n = n-16;  
            sum = 0;  
            for(int i=0;i<n;i++){  
                sum = sum +(int)Math.pow(2,(7-i));  
            }  
            System.out.println('255.255.255.'+sum);  
        }  

    }  
    //B类  
    if(x1>=128&&x1<=191){  
        if(n<=8){  
            System.out.println('255.255.'+sum+'.0');  
        }else{  
            n = n-8;  
            sum = 0;  
            for(int i=0;i<n;i++){  
                sum = sum +(int)Math.pow(2,(7-i));  
            }  
            System.out.println('255.255.255.'+sum);  
        }  

    }  
    //C类  
    if(x1>=192&&x1<=223){  
        System.out.println('255.255.255.'+sum);  
    }  
    //求每网段主机数  
    System.out.println('每网段主机数:');  
    //A类  
    if(x1>0&&x1<=126){  
        System.out.println(Math.pow(2,(32-n))-2);  
    }  
    //B类  
    if(x1>=128&&x1<=191){  
        System.out.println(Math.pow(2,(16-n))-2);  
    }  
    //C类  
    if(x1>=192&&x1<=223){  
        System.out.println(Math.pow(2,(8-n))-2);  
    }  
    //输出各子网IP范围  
    System.out.println('各子网IP范围如下:');  
    //A类  
    if(x1>0&&x1<=126){  
        if(n<=8){  
            for (int i=1,sub_id=0; i<Math.pow(2,n)-1;i++ ){  
                sub_id= (int)Math.pow(2,(8-n))*i;  
                System.out.print('<'+i+'>'+' ');  
                System.out.println(x1+'.'+sub_id+'.0.'+1+  
                    '---'+x1+'.'+(int)(sub_id+Math.pow(2,(8-n))-1)+'.255.255'+'	网络地址:'+x1+'.'+sub_id+'.0.0'+'	广播地址:'+x1+'.'+(int)(sub_id+Math.pow(2,(8-n))-1)+'.255.255');  
            }  
        }  

        if(n>8&&n<=16){  
            int subnet_id =0;//定义子网号  
            for (int i=0; i<Math.pow(2,8);i++ ){  
                if(i==0){  
                    for (int k=1,sub_id=0;k<=Math.pow(2,n-8)-1;k++){  
                        sub_id = (int)Math.pow(2,(16-n))*k;  
                        System.out.print('<'+(++subnet_id)+'>'+' ');  
                        System.out.println(x1+'.'+i+'.'+sub_id+'.'+1+'------'+x1+'.'+i+'.'+(sub_id+(int)Math.pow(2,(16-n)))+'.254'+'	网络地址:'+x1+'.'+i+'.'+sub_id+'.0'+'	广播地址:'+x1+'.'+i+'.'+(sub_id+(int)Math.pow(2,(16-n))-1)+'.255');  
                    }  
                }else{  
                    for (int k=0,sub_id=0;k<=Math.pow(2,n-8)-1;k++){  
                        if((i==255)&&k==(Math.pow(2,n-8)-1)){break;}  
                        sub_id = (int)Math.pow(2,(16-n))*k;  
                        System.out.print('<'+(++subnet_id)+'>'+' ');  
                        System.out.println(x1+'.'+i+'.'+(sub_id)+'.'+1+'------'+x1+i+'.'+(sub_id+(int)Math.pow(2,(16-n)))+'.254'+'	网络地址:'+x1+'.'+i+'.'+sub_id+'.0'+'	广播地址:'+x1+'.'+i+'.'+(sub_id+(int)Math.pow(2,(16-n))-1)+'.255');  
                    }  
                }  
            }  
        }  

        if(n>16&&n<24){  
            int subnet_id =0;//定义子网号  
            for(int m=0;m<Math.pow(2,8);m++){  
                if(m==0){  
                    for (int i=0; i<Math.pow(2,8);i++ ){  
                        if(i==0){  
                            for (int k=1,sub_id=0;k<=Math.pow(2,n-16)-1;k++){  
                                sub_id = (int)Math.pow(2,(24-n))*k;  
                                System.out.print('<'+(++subnet_id)+'>'+' ');  
                                System.out.println(x1+'.'+m+'.'+i+'.'+(sub_id+1)+'------'+x1+'.'+m+'.'+i+'.'+(sub_id+(int)Math.pow(2,(24-n))-2)+'	网络地址:'+x1+'.'+m+'.'+i+'.'+sub_id+'	广播地址:'+x1+'.'+m+'.'+i+'.'+(sub_id+(int)Math.pow(2,(24-n))-1));  
                            }  
                        }else{  
                            for (int k=0,sub_id=0;k<=Math.pow(2,n-16)-1;k++){  
                                sub_id = (int)Math.pow(2,(24-n))*k;  
                                System.out.print('<'+(++subnet_id)+'>'+' ');  
                                System.out.println(x1+'.'+m+'.'+i+'.'+(sub_id+1)+'------'+x1+'.'+m+'.'+i+'.'+(sub_id+(int)Math.pow(2,(24-n))-2)+'	网络地址:'+x1+'.'+m+'.'+i+'.'+sub_id+'	广播地址:'+x1+'.'+m+'.'+i+'.'+(sub_id+(int)Math.pow(2,(24-n))-1));  
                            }  
                        }  
                    }  
                }else{   
                    for (int i=0; i<Math.pow(2,8);i++ ){  
                        for (int k=0,sub_id=0;k<=Math.pow(2,n-16)-1;k++){  
                            if(m==255&&(i==255)&&k==(Math.pow(2,n-16)-1)){break;}  
                            sub_id = (int)Math.pow(2,(24-n))*k;  
                            System.out.print('<'+(++subnet_id)+'>'+' ');  
                            System.out.println(x1+'.'+m+'.'+i+'.'+(sub_id+1)+'------'+x1+'.'+m+'.'+i+'.'+(sub_id+(int)Math.pow(2,(24-n))-2)+'	网络地址:'+x1+'.'+m+'.'+i+'.'+sub_id+'	广播地址:'+x1+'.'+m+'.'+i+'.'+(sub_id+(int)Math.pow(2,(24-n))-1));  
                        }  
                    }  
                }  
            }     
        }  
    }  

    //B类  
    if(x1>=128&&x1<=191){  
        if(n<=8){  
            for (int i=1,sub_id=0; i<Math.pow(2,n)-1;i++ ){  
                sub_id= (int)Math.pow(2,(8-n))*i;  
                System.out.print('<'+i+'>'+' ');  
                System.out.println(x1+'.'+x2+'.'+sub_id+'.'+1+'---'+x1+'.'+x2+'.'+(int)(sub_id+Math.pow(2,(8-n))-1)+'.254'+'	网络地址:'+x1+'.'+x2+'.'+sub_id+'.0'+'	广播地址:'+x1+'.'+x2+'.'+(int)(sub_id+Math.pow(2,(8-n))-1)+'.255');  
            }  
        }  

        if(n>8&&n<16){  
            int subnet_id =0;//定义子网号  
            for (int i=0; i<Math.pow(2,8);i++ ){  
                if(i==0){  
                    for (int k=1,sub_id=0;k<=Math.pow(2,n-8)-1;k++){  
                        sub_id = (int)Math.pow(2,(16-n))*k;  
                        System.out.print('<'+(++subnet_id)+'>'+' ');  
                        System.out.println(x1+'.'+x2+'.'+i+'.'+(sub_id+1)+'------'+x1+'.'+x2+'.'+i+'.'+(sub_id+(int)Math.pow(2,(16-n))-2)+'	网络地址:'+x1+'.'+x2+'.'+i+'.'+sub_id+'	广播地址:'+x1+'.'+x2+'.'+i+'.'+(sub_id+(int)Math.pow(2,(16-n))-1));  
                    }  
                }else{  
                    for (int k=0,sub_id=0;k<=Math.pow(2,n-8)-1;k++){  
                        if((i==255)&&k==(Math.pow(2,n-8)-1)){break;}  
                        sub_id = (int)Math.pow(2,(16-n))*k;  
                        System.out.print('<'+(++subnet_id)+'>'+' ');  
                        System.out.println(x1+'.'+x2+'.'+i+'.'+(sub_id+1)+'------'+x1+'.'+x2+'.'+i+'.'+(sub_id+(int)Math.pow(2,(16-n))-2)+'	网络地址:'+x1+'.'+x2+'.'+i+'.'+sub_id+'	广播地址:'+x1+'.'+x2+'.'+i+'.'+(sub_id+(int)Math.pow(2,(16-n))-1));  
                    }  
                }  
            }  
        }      
    }  

    //C类  
    if(x1>=192&&x1<=223){  
        for (int i=1,sub_id=0; i<Math.pow(2,n)-1;i++ ){  
            sub_id= (int)Math.pow(2,(8-n))*i;  
            System.out.print('<'+i+'>'+' ');  
            System.out.println(x1+'.'+x2+'.'+x3+'.'+(sub_id+1)+'---'+x1+'.'+x2+'.'+x3+'.'+((int)sub_id+Math.pow(2,(8-n))-2)+'	网络地址:'+x1+'.'+x2+'.'+x3+'.'+sub_id+'	广播地址:'+x1+'.'+x2+'.'+x3+'.'+((int)sub_id+Math.pow(2,(8-n))-1));  
        }  
    }  
    System.out.println('子网划分完毕');  
  
}  

}

Java 代码实现子网划分,并输出网络地址和广播地址

原文地址: https://www.cveoy.top/t/topic/ojKv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录