【问题标题】:StringIndexOutOfBoundsException unclearStringIndexOutOfBoundsException 不清楚
【发布时间】:2024-11-03 15:55:02
【问题描述】:

我的目标是返回一个由每个字母组成的字符串,只要该字母在字母表中比其前一个字母晚,假设单词是小写的。问题是,我什至无法对此进行测试,因为我收到了一个错误(在标题中),而且我不确定它是如何发生的。我可以帮忙吗?

这是我的代码:

class Main {
    static String alphabetical(String str)
    {
      String alpha="abcdefghijklmnopqrstuvwxyz";
      String betical="";
        for(int k=0;k<str.length();k++){
          for (int i=0;k<alpha.length();i++){
            if(str.charAt(k)>=alpha.charAt(i)){
              betical+=str.charAt(k);
            }
          }
        }
        return betical;
    }
    //test case below (dont change):
    public static void main(String[] args){
        System.out.println(alphabetical("adatplqzh")); //result should be "adtz"
    }
}

【问题讨论】:

  • 我认为for (int i=0; k&lt; alpha.length(); i++) 应该是for (int i=0; i &lt; alpha.length(); i++)

标签: java string for-loop stringindexoutofbounds


【解决方案1】:

根据评论,您应该将 for (int i=0; k&lt; alpha.length(); i++) 更改为 for(int i=0; i&lt; alpha.length(); i++) 并修改您的条件,

 if(str.charAt(k)==alpha.charAt(i)){    
                   betical+=str.charAt(k);
                }

它会给出所需的输出

【讨论】:

  • 感谢您发现错误类型的“k”。然而,另一个问题是当我将 str.charAt(k)>=alpha.charAt(i) 更改为 str.charAt(k)==alpha.charAt(i) 它只返回输入“adatplqzh”“
  • @Christopher 在两个循环之外创建一个int pos=0; 并将内部循环更改为for (int i=pos;i&lt;alpha.length();i++){ if(str.charAt(k)==alpha.charAt(i) ){ betical+=str.charAt(k); pos=i; } }
【解决方案2】:

你的内部循环看起来不对,

for (int i=0;k<alpha.length();i++){

应该是for (int i=0;i&lt;alpha.length();i++)

【讨论】: