-1

文字列配列に順次/線形検索を書くことになっています。もうすぐ完成に近づいていますが、課題の一部で混乱しています。ターゲットが一致するか、ターゲットが配列の現在の要素よりも小さくなるまで、ターゲット項目をリストの連続する要素と比較するように指示します。数値がない場合、どのように文字列が別の要素よりも多くまたは少なくなることができますか? 多分私はそれについて正しく考えていないだけです。これまでの私のプログラムは次のとおりです。

public class SequentialSearchString {
public static boolean sequential (String[] numbers){
    //Set the target item to an arbitrary String that should return true.
    String T1 = "Frank";  

    for (int i = 0; i < numbers.length; i++){
        if (numbers[i] == T1){
            return true;    
        }
        if (numbers[i] != T1){
            numbers[i] = numbers[i+1];
        }           
    }
    return false;   
}

public static boolean sequential2 (String[] numbers){
    //Set the target key to String that should return false.
    String T2 = "Ian";
    for (int i = 0; i < numbers.length; i++){
        if (numbers[i] == T2){
            return true;    
        }
        if (numbers[i] != T2){
            numbers[i] = numbers[i+1];
        }
    }
    return false;   
}


public static void main(String[] args) {
    //Create a list of 8 Strings.
    String [] numbers = 
{"Ada", "Ben", "Carol", "Dave", "Ed", "Frank", "Gerri", "Helen", "Iggy", "Joan"};   
    //If the first target item (T1) is found, return Succuss. If not, return failure.
        if (sequential(numbers) == true){
            System.out.println("Success. 'T1' was found");
        }
        else {
            System.out.println("Failure. 'T1' was not found");  
        }
    //If the second target item (T2) is found, return Succuss. If not, return failure.
        if (sequential2(numbers) == true){
            System.out.println("Success. 'T2' was found");
        }
        else {
            System.out.println("Failure. 'T2' was not found");  
        }   
    }   
}

最初の方法は問題なく機能しますが、リストにない要素の検索に問題があるようです。プログラムを実行した後に表示されるエラーメッセージは次のとおりです。

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at SequentialSearchString.sequential2(SequentialSearchString.java:32)
at SequentialSearchString.main(SequentialSearchString.java:50)
Success. 'T1' was found

割り当てを理解し、例外を修正する助けをいただければ幸いです。

4

2 に答える 2

1
numbers[i] = numbers[i+1];

を引き起こす可能性がありますArrayIndexOutOfBoundsException

あなたの句はチェックしますi < numbers.length。したがって、境界を設定します。ただし、配列よりも大きいものi == numbers.length - 1にアクセスしようとすると、範囲外になります。i+1

例:numbers.lengthです4。そうiすることができます 3。配列が開始され、最後の位置になるため、5 番目の位置にアクセスi+1しようとします。numbers[4]0numbers[3]

于 2012-02-15T22:50:06.260 に答える
0

ArrayIndexOutOfBoundsException は、使用する事実によるものです。

for (int i = 0; i < numbers.length; i++)

そして後者:

 numbers[i] = numbers[i+1];

i が numbers.length-1 (最後の反復) に等しい場合、i+1 は numbers.length に等しくなります。次に、numbers[numbers.length] を読み込もうとしましたが、これは間違っています (有効なインデックスは 0 から numbers.length-1 までです)。

使用する必要があります:

for(int i=0;i<numbers.length-1;i++) 

例外を防止します。さて、それがあなたの問題全体を解決するかどうかはわかりませんが、例外は確かです。

于 2012-02-15T22:53:49.840 に答える