1

ArrayIndexOutOfBoundsExceptionJavaで文字列入力を取得すると、Javaが取得されました。私を助けてください。これは私のコードです: 私は自分のコードを編集して、次を使用して分割しました:

スレッド「メイン」の例外 java.lang.ArrayIndexOutOfBoundsException: solution2.Solution.main(Solution.java:27) で 1

public class Solution {

 static String search;

 public static void main(String[] args){

   String[] fn,ln,tp;
  boolean[] isSet;
 Scanner sc=new Scanner(System.in);      
 int no=sc.nextInt();

 String[][] temp=new String[no][3];
 fn=new String[no];
  ln=new String[no];
   tp=new String[no];
   isSet=new boolean[no];
   boolean flag=false;

     for(int i=0;i<no;i++){
   temp[i]=sc.nextLine().split(":");
   fn[i]=temp[i][0];
   ln[i]=temp[i][1];
   tp[i]=temp[i][2];
   isSet[i]=true;

     }

       System.out.println(temp.length);

      search=sc.nextLine();
4

4 に答える 4

1

この行で例外が発生しています:

ln[i] = temp[i][1];

だから現れる

temp[i] = sc.nextLine().split(":");

サイズ 3 の配列を:作成するには、区切り文字列で十分なトークンを受信して​​いません。String

temp[i].length == 3これらのトークンを割り当てることができることを確認する必要があります。

有効な入力の例 (注: 改行なし) は次のとおりです。

1 test:foo:bar
于 2012-10-20T15:31:29.047 に答える
0

sc.nextLine()を挿入します。以下のintno= sc.nextInt(); ライン。

java.util.Scannerをインポートします。

パブリッククラスソリューション{

static String search;

public static void main(String[] args) {

    String[] fn, ln, tp;
    boolean[] isSet;
    Scanner sc = new Scanner(System.in);
    int no = sc.nextInt();
    sc.nextLine(); // **********

    String[][] temp = new String[no][3];
    fn = new String[no];
    ln = new String[no];
    tp = new String[no];
    isSet = new boolean[no];
    boolean flag = false;

    for (int i = 0; i < no; i++) {
        temp[i] = sc.nextLine().split(":");
        fn[i] = temp[i][0];
        ln[i] = temp[i][1];
        tp[i] = temp[i][2];
        isSet[i] = true;

    }

    System.out.println(temp.length);

    search = sc.nextLine();
}

}

于 2012-10-20T15:47:51.940 に答える
0

問題は、[Enter] を押した後、sc.nextLine() が改行文字列 (例: "\n") を返すことです。2回目はあなたの入力を待っています。Java String Scanner の入力が情報を待機せず、次のステートメントに直接移動するを参照してください。情報を待つには?

あなたの場合、処理する前に sc. nextLine() を呼び出してみてください:

sc.nextLine()
temp[i]=sc.nextLine().split(":");

編集:そうです、nextLine() は完全な行を消費するため、nextInt() の後に挿入する必要があります。

于 2012-10-20T15:34:52.810 に答える
0

から作成された配列の存在しないインデックスにアクセスすると、ArrayIndexOutOfBoundsException が発生しますsplit(":")

このコードでtemp[i]は、インデックス 0、1、または2 に値があるとは限りません。これnextLine()は、「犬」などの場合、分割するコロン文字がないためです。

temp[i]=sc.nextLine().split(":");
fn[i]=temp[i][0];
ln[i]=temp[i][1];
tp[i]=temp[i][2];

この問題を解決するには、配列にアクセスする前に、配列に実際にインデックスがあることを確認する必要があります。

temp[i]=sc.nextLine().split(":");
if (temp[i].length >= 3) {
    fn[i]=temp[i][0];
    ln[i]=temp[i][1];
    tp[i]=temp[i][2];
}
于 2012-10-20T15:31:53.330 に答える