2015-11-28 26 views
6

こんにちは、私はStringString[]に追加しようとしています。ここでは、私が持っているものJava文字列を文字列に追加する

static String[] ipList = {"127.0.0.1", "173.57.51.111", "69.696.69.69"}; 
@Override 
public void actionPerformed(ActionEvent e) { 
    String newIpGet = textfield.getText(); 
    try { 
     for (int i = 0; i < Main.ipList.length; i++){ 
      Main.ipList[i+1] = newIpGet.toString(); // <---- ***** 
      Main.write(Main.ipList[i]); 
     } 
    } catch (IOException e1) { 
     e1.printStackTrace(); 
    } 

    Main.amountOfIps = Main.amountOfIps + 1; 

    System.out.println("Text Entered!"); 
    System.out.println("There are now " +Main.ipList.length + " Ips."); 
    textfield.setVisible(false); 

    label.setVisible(true);; 
} 

である。しかし、私はそれは私がどんな新しいStringのを作ってみよう文句を言わないのでjava.lang.ArrayIndexOutOfBoundsExceptionを得続けます。 ipList[]の宣言を変更することはできません。どうすればいいですか?

+2

配列は固定サイズです。新しいサイズで新しい配列を作成し、それをすべてコピーするか、ArrayListを使う必要があります。これは本質的にこれを行います – MadProgrammer

答えて

10

Java配列が固定長である(JLS-10.3. Array Creationは、部分的には、配列の長さはlength可変finalインスタンスとして入手可能である、と言います)。しかし、Arrays.copyOf(T[], int)を使って配列をコピーし、それを長くすることができます。たとえば、のようなもの、のよう

String[] ipList = { "127.0.0.1" }; 
System.out.println(Arrays.toString(ipList)); 
int len = ipList.length; 
ipList = Arrays.copyOf(ipList, len + 1); 
ipList[len] = "192.168.2.1"; 
System.out.println(Arrays.toString(ipList));   

出力は、ここでどうなるどう思いますか

[127.0.0.1] 
[127.0.0.1, 192.168.2.1] 
+2

もう一つの良いオプションです。 1 + –

+0

ありがとう、私の問題を解決! acntionPerformedからの入力を1回だけキャプチャする方法を知っていますか?それはそれを複数回複製し続けますか? – randomnessthatsfunny

+0

ループを削除します。一度だけ追加したいだけです。 –

7

です:

for (int i = 0; i < Main.ipList.length; i++){ 
    Main.ipList[i+1] = newIpGet.toString(); 
    Main.write(Main.ipList[i]); 
} 

ときi == Main.ipList.length - 1を、あなたはMain.ipList[Main.ipList.length]に等しいMain.ipList[i + 1]にアクセスしよう?これはあなたが見ている例外をスローすることが保証されています。

あなたの状態:

は、「私は本当に私がIPLISTの宣言変更カント[]またはそれはめちゃくちゃ私のプロジェクト全体のだろう。」

時々、突っ込んだり、すべてを混乱させなければならない時があります。これは、それらの1つに見えます。拡張可能な配列が必要な場合は、配列を使用せず、ArrayList<String>を使用してください。

0

java.utilパッケージのArrayList<String>も使用できます。これらは可変長であり、従ってString[]のように長さが不変である。さらに、彼らはあなたが何かを追加したり削除したりするときに「オンザフライで」行います。

関連する問題