旺旺 發問時間: 電腦與網際網路程式設計 · 1 0 年前

這題JAVA要怎麼改…

各位大大…原程式如下

import java.io.*;

public class BinaryLessThan {

public static void main(String[] argv)

throws IOException{

int[] data = {5,9,13,15,17,19,25,30,45}; // 已排序資料

System.out.println(\"請輸入要找尋的資料\");

System.out.print(\"→\");

BufferedReader br =

new BufferedReader(new InputStreamReader(System.in));

String str = br.readLine();

// 轉換為 int

int target = java.lang.Integer.parseInt(str);

int high = data.length - 1; // 範圍區間右邊位置

int low = 0; // 範圍區間左邊位置

int middle = 0;

int times = 0; // 搜尋次數

while(low <= high) { // 還沒找完

times++; // 累計次數

middle = (low + high) / 2; // 找出中間值

System.out.println(\"尋找區間:\" + low + \"(\" +

data[low] +\")..\" + high + \"(\" + data[high] +

\"),中間:\" + middle + \"(\" + data[middle] + \")\");

if(target <= data[middle]) { // 在左半邊

high = middle - 1;

} else { // 在右半邊

low = middle + 1;

}

}

System.out.println(\"經過 \" + times + \" 次的尋找\");

if(low > 0) {

System.out.println(\"比\" + target + \"小的最大元素為\" +

data[low - 1] + \"在第\" + (low - 1) + \"個位置\");

} else {

System.out.println(

\"陣列中沒有比 \" + target + \" 小的元素\");

}

}

}

這是找出小於搜尋值的最大元素,那如果我要「找出比搜尋值大的最小元素的索引碼及元素值」要怎麼寫丫?

已更新項目:

請問一下你有執行出來嗎?

我執行時出現錯誤耶…

可以請教你這for (int k:data)是啥意思丫…為什麼用:分號?

2 個已更新項目:

那我如果用JBuiler的軟體就不會有問題了吧是嗎?

1 個解答

評分
  • 1 0 年前
    最佳解答

    import java.io.*;

    public class BinaryLessThan {

    public static void main(String[] argv)

    throws IOException {

    int[] data = { 5, 9, 13, 15, 17, 19, 25, 30, 45}; // 已排序資料

    for (int k:data) {

    // 每跑一次比較後的迴圈,就印出data陣列的內容

    System.out.print(" " + k);

    }

    System.out.println("請輸入要找尋的資料");

    System.out.println("→");

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    String str = br.readLine();

    // 轉換為 int

    int target = java.lang.Integer.parseInt(str);

    int high = data.length - 1; // 範圍區間右邊位置

    int low = 0; // 範圍區間左邊位置

    int middle = 0;

    int times = 0; // 搜尋次數

    while (low <= high) { // 還沒找完

    times++; // 累計次數

    middle = (low + high) / 2; // 找出中間值

    System.out.println(

    "尋找區間:" + (low+1) + "(" + data[low] + ").." + (high+1) + "("

    + data[high] + "),中間:" + (middle+1) + "(" + data[middle]

    + ")");

    if (target >= data[middle]) { // 在右半邊

    low = middle + 1;

    } else { // 在左半邊

    high = middle - 1;

    }

    }

    System.out.println("經過 " + times + " 次的尋找");

    if (target >= data[data.length-1]) { // 在右半邊

    System.out.println("陣列中沒有比 " + target + " 大的元素");

    } else {

    System.out.println(

    "比" + target + "大的最小元素為" + data[low] + "在第"

    + (low+1) + "個位置");

    }

    }

    }

    //看看這樣有沒有滿足你的需求嘍!! ^^

    2006-06-17 12:39:26 補充:

    執行結果: 5 9 13 15 17 19 25 30 45請輸入要找尋的資料→尋找區間:1(5)..9(45),中間:5(17)尋找區間:1(5)..4(15),中間:2(9)尋找區間:1(5)..1(5),中間:1(5)經過 3 次的尋找比5大的最小元素為9在第2個位置Finished executing

    2006-06-17 12:51:07 補充:

    for (int k:data) {//這裡的k你可以把它當成指標//k預設值是0//所以第一次執行時,會叫data[0]//在for迴圈內,第二次執行時,k會指到data[1]//…依此類推。//↓這是讓它顯示出來,比較容易觀看System.out.print(" " + k);}

    2006-06-17 12:55:16 補充:

    你是在dos下執行?那錯誤訊息大概是

    1.找不到java.dll

    2.找不到Java 2 Runtime的執行環境

    我是用Gel執行的,執行環境已經透過Gel設定好了,所以這個程式可以正常執行!

    2006-06-17 17:06:14 補充:

    http://www.cis.nctu.edu.tw/~gis91610/java/loop.htm...

    For/In迴圈簡介

    J2SE5.0的新功能之一是For/In迴圈,語法如下:

    -----------------------------------------

    for (declaration : expression)

    statement

    其中 expression 必須是iterable 介面相容的敘述,declaration 是元素變數, 型態必須與expression中的元素型態相容。包括陣列或是Collection 都可以使用 For/In迴圈。

    2006-06-17 17:06:24 補充:

    剛砍掉重裝一個j2sdk-1_4_2_12-windows-i586-p,就發現這個語法行不通了,

    這邊將較正確的解釋順道放上來嘍!

    要使用for(int i:data)這個寫法,必須用jdk-1_5_0_07-windows-i586-p版本,即J2SE5.0版本唷!^^

    參考資料: 自己
還有問題?馬上發問,尋求解答。