为什么我geeting Index Out of Bounds Exception错误

时间:2016-05-05 02:21:32

标签: java

在这里,我试图打印下一个辅音字母,假设我提供输入,因为java outpt应该看起来像kava。由于j和v是辅音,因此如果它是辅音,它应该打印下一个字母

输入任何string = java 线程" main"中的bjcException java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:1     在java.lang.String.charAt(未知来源)     在Consonants.main(Consonants.java:30)

    String consonants = "BCDFGHJKLMNPQRSTVWXYZ".toLowerCase();

    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    System.out.print("Enter any string = ");
    String inputString = bf.readLine().toLowerCase();

    for(int i=0; i < inputString.length(); i++){
        inputChar = inputString.charAt(i);
        //int asciiInput = (int) inputChar; 
        String str1 = inputString.charAt(i) + "";
        int asciiInput = (int) str1.charAt(i);

        for(int j = 0; j < consonants.length(); j++){
         stringChar = consonants.charAt(j);
         System.out.print(stringChar);
         //int asciiConsonants = (int) stringChar;
         String str2 = consonants.charAt(j) + "";
         int asciiConsonants = (int) str2.charAt(j);

         if( !str1.equals(str2) ){
             nextChar = (char) asciiInput;
             System.out.print(nextChar);
         } else if ( str1.equals(str2) ) {
             nextChar = (char) (asciiConsonants + 1);
             System.out.print(nextChar);     
         }

        }
    }   

3 个答案:

答案 0 :(得分:1)

ul{ column-count: 3; column-gap: 15px; column-fill: auto; } li{width: 100%; margin: 1px; display: inline-block !important; -webkit-column-break-inside: avoid;} 只有1个字符,因为str2将获得1个字符,consonants.charAt(j)包含0个字符。

另一方面,""包含多个字符。 因此,consonants将成为j1将发出错误。

您可能需要str2.charAt(j);(int) str1.charAt(0),而不是(int) str2.charAt(0)(int) str1.charAt(i)

答案 1 :(得分:1)

您收到错误的原因是str1str2是单字符字符串,因此charAt()将超出范围,除非i和{{ 1}}是0。

此外,如果您原谅我,我已对您的代码进行了一些改进:

j

答案 2 :(得分:0)

以下代码导致您的例外:

rule "maxDaysInPeriod"
when
$shiftAssignment : ShiftAssignment(employee != null)
then
int differentDaysInPeriod = MethodsUsedInScoreCalculation.employeeMaxDaysPerPeriod($shiftAssignment.getEmployee());
int maxDaysInPeriod = $shiftAssignment.getEmployee().getAgentPeriodSettings().getMaxDaysInPeriod();
if(differentDaysInPeriod > maxDaysInPeriod)
{
scoreHolder.addHardConstraintMatch(kcontext, differentDaysInPeriod - maxDaysInPeriod);
}
end

str1只有一个字符,在第二次迭代中,你要求第二个不存在的字符。你只会在索引为0时才能工作。