我收到关于我的索引超出界限的错误

时间:2015-10-19 03:13:57

标签: java multidimensional-array indexoutofboundsexception

我的代码是为了找到两个单词在公共字母处相交的次数,然后打印掉两个单词,如果它们交叉的话。

当我编译它很好但是当我运行它时我得到一个错误。我知道这与我的指数超出范围有关,但我不知道该怎么做。

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>

1 个答案:

答案 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));