【Java】数値降順整列
今回の問題は、5つの数字を降順にソートして出力する問題です。
Javaには「Collections.sort」と「Collections.reverse」という便利なAPIがあるのでそれを利用して問題を解きます。以下コードです。
import static java.lang.Integer.parseInt;
import static java.lang.System.out;
import static java.util.Collections.reverse;
import static java.util.Collections.sort;
import java.util.ArrayList;
import java.util.List;
import volume0.BaseExe;
public class SortingFiveNumbers extends BaseExe {
public static void main(String[] args) {
new SortingFiveNumbers().exeSysIn();
}
@Override
protected void execute() throws Exception {
List list = revSortList();
for (int index = 0; index < list.size(); index++)
printItem(index, list);
}
private List getList() {
String[] inDataes = nextLine().split(" ");
List list = new ArrayList<>();
for (int index = 0; index < 5; index++)
list.add(parseInt(inDataes[index]));
return list;
}
private List revSortList() {
List list = getList();
sort(list);
reverse(list);
return list;
}
private void printItem(int index, List list) {
if (index == list.size() - 1)
out.println(list.get(index));
else
out.print(list.get(index) + " ");
}
}
無駄にメソッド分割していますが、お気になさらず。どうやったら綺麗なコードを書けるか苦戦中です。テストドライバは以下になります。
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import volume0.BaseTest;
public class SortingFiveNumbersTest extends BaseTest {
private SortingFiveNumbers sfn;
@Before
public void setUp() throws Exception {
super.setUp();
sfn = new SortingFiveNumbers();
}
@After
public void tearDown() throws Exception {
super.tearDown();
}
@Test
public void test() {
sfn.exeFileIn("./data/volume0_0018/in.txt");
assertOutList("./data/volume0_0018/out.txt");
}
}
テストドライバ内で使用している「in.txt」・「out.txt」は以下になります。
in.txt
3 6 9 7 5
out.txt
9 7 6 5 3
今回の問題は以下にあります。
5つの整数の並べ替え | Aizu Online Judge
アルゴリスムで困った時は、以下の本を参考にしてます。Javaに置き換えるのが少々難解ですが、、、
固有処理の基底クラスは以下の記事に記載していますので、参考にしてください。
テストドライバで継承しているクラスは以下の記事に記載していますので、参考にしてみてください。