1. 程式人生 > >Java如何在命令列讀取引數 [ 遞迴法實現二分查詢 ]

Java如何在命令列讀取引數 [ 遞迴法實現二分查詢 ]

目的:用Java編寫了一個遞迴實現二分查詢(BinarySearch)的程式,希望能夠在命令列執行:讀取鍵盤輸入的一個整數作為輸入引數key(即 所查詢的數),輸出每次遞迴呼叫二分查詢時的中間數,以及查詢結果(key值在陣列中的位置)。

注:被查詢陣列我設為 int[ ] a = { 0, 1, 2, ... ..., 98, 99 } 

程式碼

// recursive BinarySearch
import java.util.*;                //要匯入響應的庫

public class RecursiveBS {
	public static int rank(int key, int[] a) {
		return rank(key, a, 0, a.length-1);
	}
	public static int rank(int key, int[] a, int lo, int hi) {  /*二分查詢的遞迴實現*/
		if(lo>hi) return -1;
		int mid = lo + (hi-lo)/2;
		System.out.println("mid: " + mid); 
		if(key == a[mid]) return mid;
		else if(key<a[mid]) return rank(key,a,lo,mid-1);
		else return rank(key,a,mid+1,hi);
	}
	public static void main(String[] args) {
		Scanner inPut = new Scanner(System.in);    //用到 Scanner類
		int key = inPut.nextInt();                 //
		inPut.close();                             //
		int[] a = new int[100];
		for(int i = 0;i<a.length;i++) {
			a[i] = i;
		}
		int pos = rank(key,a);
		System.out.println("the pos is: " + pos);
	}
}

執行

1)在命令列編譯並執行RecursiveBS類檔案:......輸入命令java RecursiveBS,回車;

2)輸入一個整數作為要查詢的key值 如:87,回車;即得到輸出結果。

3) 測試一下其他的數:

輸入99:

輸入101:

待改進:如何輸入多個數 而不用每次都重新執行java RecursiveBS命令