ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュのArrays.sort()メソッドを使わずにデータファイルを読み込み、ソートするプログラム

  • mixiチェック
  • このエントリーをはてなブックマークに追加
Arrays.sort()メソッドを使わずにデータファイル(Data.txt)を読み込み、昇順にソートするプログラムを作成せよという問題で

実行例
データファイル名: Data.txt
元のデータ: 33, 1, 2, 26, 21, 28, 62, ...
ソートデータ: 1, 2, 5. 9. 13. 17, ...

のようにしたいのですが、どのようにプログラムを書いたらよいでしょうか。データファイル(Data.txt)の内容は以下の通りです。(1つの数字ごとに改行されています) どうか、回答よろしくお願いいたします。


Data.txt

33
1
2
26
21
28
62
70
61
82
77
88
61
75
62
67
63
17
5
83
35
96
80
57
9
13
40
22
68
46

コメント(11)

補足です! Arrays.sort()メソッドを使ったソースは以下のようになります。(クラス名はKadai)

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;

public class Kadai {
public static void main(String[] args){
String filename = "Data.txt";
int dataN; // データ数
int[] data; // データ

// Data.txtからデータを読み込む
System.out.println("ファイル名:" + filename);
dataN = countData(filename);
data = new int[dataN]; // データ数分の配列を確保
readData(data, filename, dataN);// データを読み込む

// データを昇順に並べる
Arrays.sort(data);
System.out.println("ソートデータ:");
for(int i=0; i<dataN; i++) {
System.out.print(data[i]);
if(i == dataN-1) {
System.out.println();
} else {
System.out.print(", ");
}
}
}


static int countData(String fname) {
try {
File file = new File(fname);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
int count=0;

while(br.readLine() != null) {
count++;
}
return count;
} catch(IOException e) {
System.out.println(e);
return (-1);
}
}

static void readData(int[] data, String fname, int N) {
try {
File file = new File(fname);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);

for(int i=0; i<N; i++) {
int i_data = Integer.parseInt(br.readLine());
data[i] = i_data;
}
br.close();
} catch(IOException e) {
System.out.println(e);
}
}
}

これをArrays.sort()メソッドを使わずに同じことをするにはどうしたらよいでしょうか。どうか回答よろしくお願い致します。
これってソートのアルゴリズムが知りたいってことになりますよね。

ソートのアルゴリズムなら、書籍やネットにもありそうですね。

テラテイルなら早く解決するかも知れませんね。

回答ではなく、コメントです。
検索キーワードは ソート JAVA アルゴリズム
検索したらこんなの出ました。
http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/bubble-sort.html

ほかにもクイックソートとかいろいろありますが、バブルソートが他のソートと比べ一番簡単な方法だと思います。これよりもスピードアップしたかった場合バブルソート以外の難解なソートがあります。
// データを昇順に並べる
Arrays.sort(data);

System.out.println("ソートデータ:");

for(int i=0; i<dataN; i++) {
System.out.print(data[i]);
if(i < dataN-1) {
System.out.print(", "); //区切り記号
}
}

System.out.println(); //改行
}

一行すべて書き終わったら改行する方が好き
こんばんわ。ちょっと調べてみました。こんなのはどうでしょうか。ではまた。

package sortsample2;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class SortSample2 {
public static void main(String[] args) {
List<Integer> array = new ArrayList();

try {
File file = new File("d:\\data.txt");
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String str;
while ((str = br.readLine()) != null) {
array.add(Integer.parseInt(str));
System.out.print(str + " ");
}
}
} catch (FileNotFoundException e) {
System.out.println(e);
} catch (IOException e) {
System.out.println(e);
}
System.out.println("");

Collections.sort(array);
System.out.println(array);
  }
}
もしこれが上手く行くなら

public class SortSample3 {
public static void main(String[] args) {

List<Integer> array_number = load_num( "d:\\data.txt" );

Collections.sort(array);
System.out.println(array);






//数字よみこみ
public List<Integer> load_num( String filename ) {
List<Integer> array = new ArrayList();

try {
File file = new File(filename);
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String str;
while ((str = br.readLine()) != null) {
array.add(Integer.parseInt(str));
System.out.print(str + " ");
}
}
} catch (FileNotFoundException e) {
System.out.println(e);
} catch (IOException e) {
System.out.println(e);
}
System.out.println("");

return array;
  }
}

ごめん僕はJavaで一度携帯ゲーム一回作った事があるだけで、文法があやふやに覚えてる。たぶんこれで読み込める。これからはload_number(”ファイル名”);1行追加で、数字が読み込める。

数字読み込み関数を自作ツールのクラスにコーディングしたら凄く短い時間で開発できる。
IPO、入力Input、処理Process、出力Output、を持ったものが関数。

メソッド is-a 関数。

SAMインターフェースを使った関数オブジェクトやラムダ式がある。

ここは今、勉強していたところ。
>>[10]
系統だてて学んでらっしゃるのですね!僕は独学なんだけど、ちょっと穴が多く、系統だてて勉強せずにいるので、これからのZeppさまの書き込みを参考にします。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング