【问题标题】:How do I create loop using InetAddress? [closed]如何使用 InetAddress 创建循环? [关闭]
【发布时间】:2013-10-02 06:44:58
【问题描述】:

我想创建一个循环,使用 Inetaddress 类型的基本机制的 IP 地址来 ping LAN 中的 PC。我正在尝试将其转换为整数形式,但出现错误。

这是我的代码;错误在第 17 行,错误为 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at practice.trying.main(trying.java:27)

 /**************************/
    import java.net.*;
    import java.io.DataInputStream;
    import java.io.IOException;
    import java.util.*;
    public class trying {
    public static void main(String[] args) throws IOException
    {
        DataInputStream in = new DataInputStream(System.in);
        String s ;
        int[] ia=new int[4] ;
        System.out.println("enter the ip ");
        s=in.readLine();
        System.out.println(s);
        String st1[]=s.split(".");
        for(int i=0;i<=4;i++)
        {
         ia[i]=Integer.parseInt(st1[i]);
     System.out.println(ia[i]);
        }
    }
    }
    /*********************************/

【问题讨论】:

  • 请编辑您的问题以便阅读。
  • for(int i=0;i&lt;=4;i++) 数组以 0 为基数。split() 也需要一个正则表达式。
  • 为了将来参考,(trying.java:27) 指的是发生错误的类 (trying.java) 和行号 (27),因此在调试时,从那里开始。如果您已经知道这一点...请指出它到底是哪一行。
  • 这里没有关于InetAddress 的内容。如果你想创建一个 InetAddress 对象,那么 just create it 并且不要为所有这些 split 垃圾而烦恼。

标签: java


【解决方案1】:

不管你在标准输出中输入什么,这个

String st1[]=s.split(".");

将产生一个大小为 0 的数组。所以

Integer.parseInt(st1[i]);

任何i 的值都会产生ArrayIndexOutOfBoundsException。原因是String#split(String) 需要一个正则表达式模式。此外,它不包含任何空字符串。

. 是正则表达式中的特殊字符,表示任何字符。因此,您试图拆分任何字符并丢弃空字符串。所以你最终没有元素。

你想用

String st1[]=s.split("\\.");

以便. 特殊字符在正则表达式中被转义。


还要注意你的 for 循环

for(int i=0;i<=4;i++)

i 到达4 时也会给出ArrayIndexOutOfBoundsException。请记住,数组索引从 0 开始。您需要

for(int i = 0; i < 4; i++)

或者更好

for(int i = 0; i < ia.length; i++)

您使用的是一个循环,但使用了 2 个数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-18
    • 2012-11-18
    • 2020-07-23
    • 2015-10-04
    • 2019-06-20
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多