1
30
51
16
2
…
のように書かれているテキストファイルからint型の配列にこれを格納もしくはString型の配列からint型に変換して、二分探索を行いたいです。下記のようにコードを書いてみたのですが、うまくいきませんでした。
こちら初心者なので間違い等多々あると思いますがご教授いただけると幸いです。
package practice;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
public class Test{
public static void main(String[] args) { BufferedReader br = null; //配列の要素を宣言します。 String str[] = new String[10000]; Scanner sc=new Scanner(System.in); int x = sc.nextInt(); int pos = -1; int lower = 0; // 下限 int upper = str.length - 1; // 上限 int n=0; int[] num = new int[ str.length ]; // String型の値をint型の値に変換 for ( int i = 0; i < strTable.length; i++ ) { try { int value = Integer.valueOf( str[ i ] ); num[ i ] = value; } catch( NumberFormatException ne ) { return ; } } try { br = new BufferedReader(new FileReader("G:\download\test.txt")); int i = 0; //ファイルの件数分ループして配列に格納 while (br.ready()) { String line = br.readLine(); str[i] = line; i++; } double startTime=System.currentTimeMillis(); while (lower <= upper) { n++; int mid = (lower + upper) / 2; if (num[mid] == x) { pos = mid; break; } else if (num[mid] < x) { lower = mid + 1; } else { upper = mid - 1; } } double endTime=System.currentTimeMillis(); System.out.println("探索時間="+(endTime - startTime)+"[ms]"); if (pos < 0) { System.out.println("見つかりません"); } else { System.out.println(x + "は" + pos + "番目です"); System.out.println("探索回数は"+n+"回"); } }catch (FileNotFoundException e){ System.out.println("ファイルが見つかりません。"); e.printStackTrace(); }catch (IOException e){ System.out.println("入出力エラーです。"); e.printStackTrace(); }finally{ if(br != null){ try{ br.close(); }catch(IOException e) { System.out.println("入出力エラーです。"); e.printStackTrace(); } } } }
}
回答1件
あなたの回答
tips
プレビュー