2017-09-16 77 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

它现在工作,谢谢你的帮助。 –