【问题标题】:Java for loop getting StringIndexOutOfBoundsExceptionJava for循环获取StringIndexOutOfBoundsException
【发布时间】:2017-10-06 05:44:22
【问题描述】:

所以我试图将一个字符串(有罪)更改为同一字符串的加扰版本。唯一不随机的是任何双字母都必须放在一起。因此,如果我有字符串“pharmacy”,它必须是“mraacpyh”之类的东西。我以为我明白了,但现在我得到了一个 StringIndexOutOfBoundsException。谁能阐明我做错了什么?

   String guilty = "";
   String scramble = "";
   if (killer == 0)
     guilty = "pharmacy";
   if (killer == 1)
     guilty = "closet";
   if (killer == 2)
     guilty = "newspaper";
   if (killer == 3)
     guilty = "dollar";
   if (killer == 4)
     guilty = "college";

   while (!guilty.equals("")){
      int i = r.nextInt(guilty.length());
      for (int j = 0; j < guilty.length()-guilty.replace(guilty.substring(i, i+1), "").length(); i++){
      scramble = scramble + guilty.substring(i, i+1);
      }
      guilty = guilty.replace(guilty.substring(i, i+1), "");
      System.out.println(scramble);
      System.out.println(guilty);
   }

【问题讨论】:

  • 您应该将 while 循环更改为 if 语句。 if(!guilty.equals("")){
  • 你的代码很不完整。我们不知道杀手从一开始就在做什么。粘贴您的完整代码。
  • @progyammer 可能是杀戮,因为这部分代码试图找到有罪的一方。

标签: java for-loop indexoutofboundsexception


【解决方案1】:
int i = r.nextInt(guilty.length());

如果有罪的是'APPLE',我是5。最后一个字符'E'的索引是4! (第一个字符的索引为 0) 问题就在这里:

guilty.replace(guilty.substring(i, i+1), "")

如果增加变量 i,它将高于字符串的最大索引。 i 是字符串的最大索引。

否则,洗牌:

import org.apache.commons.lang3.ArrayUtils; //ver.3.6
...
String s = "apple";
char[] chars = s.toCharArray();
ArrayUtils.shuffle(chars);
System.out.print(String.valueOf(chars));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 2015-03-21
    • 2014-12-21
    • 1970-01-01
    • 2021-03-27
    • 2011-03-10
    相关资源
    最近更新 更多