ここではテキストデータに入っている数値をできるだけ均等になるように
グループ分けするプログラムを作ります。
準備すること
今回のプログラムで私が使っているテキストデータには
1~1000の数値が入っています。
このテキストデータを作る際には、
public class a {
public static void main(String[] args) {
for (int i=1;i<1001;i++) {
System.out.println(i);
}
}
}
というプログラムを組み、実行するときにコマンドプロンプトで
Java a>number.txt
と入力して実行すれば簡単に作ることができます。
今回のプログラムの考え方
データを均等にグループ分けする簡単な方法はデータを降順に並べ替えて、
両方のグループのうち合計値が少ない方に数値を足していけばだいたい均等に
振り分けることができます。
ソースコード
import java.io.*;
import java.util.*;
public class numbers2 {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new FileReader("number.txt"));
int[] a=new int[1000];
for (int i=0;i<1000;i++) {
a[i]=Integer.parseInt(br.readLine());
}
for (int i=0;i<a.length-1;i++) {
for (int j=i+1;j<a.length;j++) {
if (a[j]>a[i]) {
int sum =a[j];
a[j]=a[i];
a[i]=sum;
}
}
}
int A=0,B=0;List num1=new ArrayList();
List num2=new ArrayList();
for (int i=0;i<1000;i++) {
if (A<=B) {
A=A+a[i]; num1.add(a[i]);
}else if (A>B) {
B=B+a[i];
num2.add(a[i]);
}
}
System.out.println(A+" "+B);
System.out.println(num1);
System.out.println();
System.out.println(num2);
}
}
実行結果
この様になり1~1000までの数値を均等に分けることができます。
グループ分けはlistを使って、足した方のグループに加えていっています。
スポンサーリンク
BufferedReader br=new BufferedReader(new FileReader("number.txt"));
この文でどこのファイルからデータを読み込むのかを決めています。
"number.txt"
の所は自分のテキストデータの名前を入力してください。
テキストデータがJavaのファイルと同じ所にある時はテキストデータの名前だけで良いが、
違うファイル等に保存されているときはそのファイルまでのパスを入力してください。
パスとは
の形のものです。