ランダムな 10 の数値配列を生成し、その配列をバブル ソートで並べ替え、その値が配列内にあるかどうかを二分探索で調べるプログラムを作成しました。私のコードはすべて正しいように見えますが、プログラムを実行するたびに、検索することを選択した数値が実際に配列内にある場合でも、そうではないことがわかります。戻り値と関係があると思いますが、コードは正しいように見えます。
import java.util.Scanner;
public class BubbleSort {
public static void main(String[] args) {
final int SIZE=10;
int[] numbers= new int[SIZE];
int number;
int result;
Scanner keyboard = new Scanner(System.in);
loadArray(numbers);
sortArray(numbers);
displayArray(numbers);
System.out.print("Enter your number: ");
number=keyboard.nextInt();
result=binarySearch(numbers, number);
if(result==-1){
System.out.print("Your number was not found");
}else{
System.out.print("Your number was found");
}
}
public static void loadArray(int[] numbers){
int index;
for(index=0;index<numbers.length;index++){
numbers[index]=(int)(Math.random()*100)+1;
}
}
public static void sortArray(int[] num){
int index;
int passNo;
int holdingnumber;
//boolean condition=true;
//while(condition){
//condition=false;
for(passNo=0;passNo<num.length-1;passNo++){
for(index=0;index<num.length-1;index++){
if(num[index]>num[index+1]){
holdingnumber=num[index+1];
num[index+1]=num[index];
num[index]=holdingnumber;
//condition=true;
}
}
}
}
public static void displayArray(int[] numbers){
int index;
for(index=0;index<numbers.length;index++){
System.out.println("Element["+index+"]: " +numbers[index]);
}
}
public static int binarySearch(int[] array, int number){
int low=0;
int mid=0;
int high=0;
while(low<=high){
mid=(low+high)/2;
if(array[mid]>number){
high=mid-1;
}else if(array[mid]<number){
low=mid+1;
}else{
return mid;
}
}
return -1;
}
}