2017-09-16 111 views
0

我想使程序具有不同的行爲,當用戶輸入某些參數給程序通過掃描程序接收的字符串。我的問題是,我想讓用戶不會寫第二個參數,例如程序仍然可以工作。Java掃描器拆分ArrayOutOfBounds

static String ReadString() { 
     Scanner scan = new Scanner(System.in); 
     return scan.nextLine(); 
    } 
String command = ReadString(); 
String words[]=new String[4]; 
words[0]="empty"; 
words[1]="empty"; 
words[2]="empty"; 
words[3]="empty"; 
words = command.split(" "); 

的問題是,如果我打電話例如字[1]用戶只寫一個參數傳遞給字符串後,我仍然得到錯誤ArrayOutOfBounds,雖然應與價值「的字符串空」。

示例: 用戶寫入:ababbbbb命令1 >>>當我打電話字[1]應該給我命令1

用戶寫入:ababbbbb >>>當我打電話字[1]應該給我空

+0

我沒有提到的錯誤時,執行你的代碼 – Ravi

+0

也許我不是對問題足夠清楚。我舉了一個我想要做的例子。 –

+0

不要忘記接受答案。 – Ravi

回答

1

因爲,當你寫下代碼的時候,這意味着words這是String類型的數組指向引用,它是分配內存來保存4個字符串。現在

String words[]=new String[4]; 

,下面的你在哪裏通過劈裂他們通過" "創建陣列代碼行只有尺寸1.現在,words可變參考已經改變,它只能容納1 String

words = command.split(" "); 

你需要做以下更正:

String command = ReadString(); 
    String words[]=new String[4]; 
    String[] n = command.split(" "); 

    for(int i=0; i< 4; i++) 
    { 
     if((n.length-1)==i) 
     { 
     words[i]=n[i]; 
     } 
     else 
     { 
     words[i]="empty"; 
     } 
    } 

>>>Demo < < <

+0

好的..我已經修改了代碼,以字符串單詞[] = command.split(「」); 。現在我可以調用與原始字符串分離的每個字符串。但是現在我怎麼能確保如果字符串沒有足夠的參數來填充數組,並且例如不存在的單詞[2],仍然想用內部的東西填充該位置。因爲我試圖使用if(words [2] == null)words [2] =「empty」;我仍然遇到了出界錯誤。 –

+0

但是,那不是你想要的。對 ? – Ravi

+0

它現在工作,謝謝你的幫助。 –