在这里,我试图打印下一个辅音字母,假设我提供输入,因为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);
}
}
}
答案 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
将成为j
,1
将发出错误。
您可能需要str2.charAt(j);
和(int) str1.charAt(0)
,而不是(int) str2.charAt(0)
和(int) str1.charAt(i)
。
答案 1 :(得分:1)
您收到错误的原因是str1
和str2
是单字符字符串,因此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时才能工作。