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

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

Javaの課題丸投げコミュの[課題]クラス分け ソートプログラム

  • mixiチェック
  • このエントリーをはてなブックマークに追加
はじめまして。なんとも素晴らしいコミュですね。
早速参加&質問させて頂きます。

JAVAは勉強始めて3週間程の初心者です。
基本的な事で大変恐縮ですがよろしくお願いします。

課題で、+で昇順・-で降順に並べ替え、cでクリア・ceで1回の入力クリア・eで終了という数値ソートプログラムを作成しました。
まず、フローチャートを作りそれをもとに以下ソースを書きました。
これを1.数値判断、2.ゼロ消し処理、3.並べ替え、4.全角半角処理(ソース未記入)の最低4つのクラスに分けるという問題なのですが、なにぶん初心者だもので、どこからどのように手をつけていいものか皆目見当がつきません。
どのような事でも構いません。
何かお気づきの点、ヒント・アドバイスなどお願いしたいと思います。


おそらく私がオブジェクト指向に関する理解が乏しい為だと思います。
オブジェクト指向を理解する上で役立つサイトや書籍など、あわせてご紹介いただけると嬉しすぎて鼻血モノです!
よろしくお願いします。

--------------------------------------------------------
import java.util.ArrayList;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Collections;
import java.lang.IndexOutOfBoundsException;
import java.math.BigDecimal;
import java.text.DecimalFormat;




class SortTest {
public static void main(String args[])throws IOException {
//ArrayListクラスのオブジェクトarrayListの作成
ArrayList arrayList = new ArrayList();
//キーボードからの入力を受け取るオブジェクトの作成
String input = "";
//ソート後の数字を受け取るオブジェクトsortListの作成
ArrayList sortList = new ArrayList();
String msg = "数字";
Object copy = "";
int index = 0;
BigDecimal bigDecimal;

String answer;

for( ; ; ) {

// 表示
System.out.println("\n入力された数字"+arrayList);
System.out.println("並べ替え後の数字"+sortList);
System.out.print(msg+"を入力してください >>");

// キーボードからの入力値を受け取りinputに格納
BufferedReader br
= new BufferedReader(new InputStreamReader(System.in));
input = br.readLine();

// 数値判断
try {
bigDecimal = new BigDecimal (input );

answer = bigDecimal.toString();
//0消し処理
if (answer.indexOf('.') != -1 ) {
int len = answer.length();
while (answer.charAt( len - 1 ) == '0') len--;
while (answer.charAt( len - 1 ) == '.') len--;
answer = answer.substring(0,len);
}

arrayList.add(answer);

//arrayListの要素が2つ以上のときのmsgの変更
if (arrayList.size()>=2){
msg = ("数字または\n+(昇順に並べ替える場合)または\n-(降順に並べ替える場合");
}
}

catch(Exception e1){
// inputが+もしくは-である
if ((input.equals("+"))||(input.equals("-"))){
if (arrayList.size()>=2){
// Collections.copy(sortList,arrayList);
sortList = new ArrayList(arrayList);
// +にソート
if(input.equals("+")){
Collections.sort(sortList);
}
// -にソート
else{
Collections.sort(sortList);
Collections.reverse(sortList);
}
}
else{
System.out.println("数字を2つ以上入力して下さい");
}

}
// input が c である
else if ((input.equals("c"))||(input.equals("C"))){
arrayList.clear() ;
sortList.clear() ;
msg = "数字";
}

// input が ce である
else if ((input.equals("ce"))||(input.equals("CE"))){
// arrayList に数字が1つ以上ある
if (arrayList.size() >= 1) {
// arrayList の末尾をobject copy にコピー
copy = arrayList.get(arrayList.size()-1);
// arrayList の最後の数字を消す
arrayList.remove(arrayList.size()-1);

// arrayList の要素数 < sortList の要素数
if(arrayList.size() < sortList.size()){
// sortList のなかで arrayList の末尾の数字と同じ
// 数字のインデックスを取得
index = sortList.indexOf(copy);
// arrayListの末尾の数字と同じ数字を
// sortListの中から消す
sortList.remove(index);
}

if(arrayList.size() ==1){
sortList.clear() ;
msg = "数字";
}
}
}
else if (!( input.equals("e"))) {
System.out.println("不正な値が入力されました");
}
else {
System.out.println("終了");
break;
}
}
}
}
}
-------------------------------------------------------

コメント(4)

ふじっぺさん
数々のご指摘ありがとうございます!!

>都合のいい引数を与えて処理するメソッドを
>とりあえず作ってみましょう。
この辺が難しいんですよねぇ〜〜
今日数値判断・ゼロ消しはなんとかクラス分けする事が
できました!
ただ、全角・半角処理がさっぱりで・・・

>100,57,200をソートしてもうまくいきますか?
ゼロ消しの処理をするためStringにしたまま放置してました・・
またBigDecimalに戻しうまくできました!

>inputを小文字に変換してから判定すれば
>"ce","Ce","cE","CE"全てのパターンを簡単に
>判定できますよ。
こちらもすっきり出来ました!

トリさん
サイト参考にさせて頂きます!

お二人のお陰で少し前進しました!
まだまだ課題は山積みですががんばります。
ありがとうございます!

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

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

Javaの課題丸投げ 更新情報

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

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

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