我的代码是为了找到两个单词在公共字母处相交的次数,然后打印掉两个单词,如果它们交叉的话。
当我编译它很好但是当我运行它时我得到一个错误。我知道这与我的指数超出范围有关,但我不知道该怎么做。
x-10-250-57-156:csci1103 Katie$ java Assg23 lottery boat
blotto a t Exception in thread "main" `java.lang.StringIndexOutOfBoundsException: String index out of range: 4`
at java.lang.String.charAt(String.java:658)
at Assg23.printCross(Assg23.java:59)
at Assg23.main(Assg23.java:27)
我收到此错误:
第59行是:System.out.print(w2.charAt(i)); 第27行是:printCross(w1,pos1,w2,pos2);
...
<DataGridTextColumn Binding="{Binding ShippingNumber}" Header="出荷No." ElementStyle="{DynamicResource TextAlignCenter}" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding DivisionDisplay}" Header="区分" ElementStyle="{DynamicResource TextAlignCenter}" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding ShippingDestinationCode}" Header="出荷先コード" ElementStyle="{DynamicResource TextAlignCenter}" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding ShippingDestinationNameDisplay}" Header="出荷先名" ElementStyle="{DynamicResource TextAlignCenter}" IsReadOnly="True"/>
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="TextAlignment" Value="Center"/>
<Setter Property="Width" Value="{Binding DataContext.CustomWidth, ElementName=Page}"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
答案 0 :(得分:0)
跟踪printCross算法。
外循环遍历你的第一个字符串的长度,w1 - (&#34;彩票&#34;),你的内循环遍历第二个字符串的长度,w2 - (&#34; boat&# 34)。
一旦你的外循环索引(i)大于字符串w2的长度,你就不想访问w2.charAt(i),这就是你在{{1}行中所做的}。
同样适用于行System.out.print(w2.charAt(i));
,但只有当j大于w1的长度时才会出现问题(即,如果字符串w1比字符串w2短)。
我不完全确定我是否理解你要做的事情,但你可以实现一个简单的检查:
System.out.print(w1.charAt(j));