質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

848閲覧

入力した値が表示されない。

nejirin_boy

総合スコア21

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/01/19 04:29

###前提・実現したいこと

case1で入力した予定をcase2,3,4で表示するプログラムを作っています。
入力した予定がうまく表示できません。
case1で入力した予定をcase1で表示できることは確認いたしました。
case2,3,4に何か問題があると思います。

どなたか修正点を教えていただけないでしょうか?

###発生している問題・エラーメッセージ

エラーメッセージはありません。

###該当のソースコード

Java

1import java.util.ArrayList; 2import java.util.List; 3import java.io.*; 4import java.util.Comparator; 5 6class ToDo{ 7 int month; 8 int day; 9 String item; 10 int priority; 11} 12 13class sort24 14{ 15 public static void main(String[] args)throws IOException 16 { 17 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 18 19 while(true){ 20 21 ArrayList<ToDo> todo = new ArrayList<ToDo>(); 22 23 System.out.println("予定を追加するなら1を入力。"); 24 System.out.println("予定を月順で表示するなら2を入力"); 25 System.out.println("予定を優先度順で表示するなら3を入力"); 26 System.out.println("予定を削除するなら4を入力"); 27 28 String str = br.readLine(); 29 int num = Integer.parseInt(str); 30 31 ToDo tmp = new ToDo(); 32 33 switch(num){ 34 case 1: 35 36 do{ 37 System.out.println("月を入力して下さい(1〜12)"); 38 39 String month = br.readLine(); 40 tmp.month = Integer.parseInt(month); 41 42 }while(!(1 <= tmp.month && tmp.month <= 12)); 43 44 do{ 45 System.out.println("日を入力して下さい(1〜31)"); 46 47 String day = br.readLine(); 48 tmp.day = Integer.parseInt(day); 49 50 }while(!(1 <= tmp.day && tmp.day <= 31)); 51 52 System.out.println("予定"); 53 54 String item = br.readLine(); 55 tmp.item = item; 56 57 58 do{ 59 System.out.println("優先度を入力して下さい(1〜5)"); 60 61 String priority = br.readLine(); 62 tmp.priority = Integer.parseInt(priority); 63 64 }while(!(1 <= tmp.priority && tmp.priority <= 5)); 65 66 todo.add(tmp); 67 68 //追加したところ case1では表示される 69 for(int i = 0; i < todo.size(); i++){ 70 System.out.println(todo.size() +":"+ todo.get(i).month + "月" + todo.get(i).day + "日 " + todo.get(i).item + " 優先度:" + todo.get(i).priority); // 昇順になる 71 } 72 73 break; 74 75 case 2://case2以降に問題がある 76 System.out.println("予定です。(月昇順)"); 77 78 todo.sort(new Comparator<ToDo>() { 79 80 public int compare(ToDo todo1, ToDo todo2) { 81 82 int month = Integer.compare(todo1.month, todo2.month); 83 84 if (month == 0) { 85 return Integer.compare(todo1.day, todo2.day); 86 } 87 else { 88 return month; 89 } 90 } 91 }); 92 93 for(int i = 0; i < todo.size(); i++){ 94 System.out.println(todo.size() +". "+ todo.get(i).month + "月" + todo.get(i).day + "日 " + todo.get(i).item + " 優先度:" + todo.get(i).priority); // 昇順になる 95 } 96 break; 97 98 case 3: 99 System.out.println("予定です。(優先度昇順)"); 100 101 todo.sort((a,b)-> a.priority - b.priority); 102 103 for(int i = 0; i < todo.size(); i++){ 104 System.out.println(todo.size() +". "+ todo.get(i).month + "月" + todo.get(i).day + "日 " + todo.get(i).item + " 優先度:" + todo.get(i).priority); // 昇順になる 105 } 106 break; 107 108 case 4: 109 System.out.println("削除したい予定の番号を入力して下さい。(月順の場合)"); 110 do{ 111 String remove1 = br.readLine(); 112 todo.remove(Integer.parseInt(remove1)-1);//-1する 113 }while(!(1 <= todo.size())); 114 115 System.out.println("予定が削除されました。"); 116 117 for(int i = 0; i < todo.size(); i++){ 118 System.out.println(todo.size() +". "+ todo.get(i).month + "月" + todo.get(i).day + "日 " + todo.get(i).item + " 優先度:" + todo.get(i).priority); // 昇順になる 119 } 120 121 break; 122 } 123 } 124 } 125} 126

###試したこと
case1では入力した値を表示できることは確認しました。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こんにちは。

以下のように、ArrayList<ToDo> todo を初期化している行を、
whileループの外側に移動すれば、とりあえずそれらしく動く
のではないでしょうか?

たとえば以下のように修正します。

修正前:

java

1public static void main(String[] args)throws IOException 2 { 3 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 4 5 while(true){ 6 7 ArrayList<ToDo> todo = new ArrayList<ToDo>(); // この行を while の上に移動

修正後:

java

1public static void main(String[] args)throws IOException 2 { 3 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 4 ArrayList<ToDo> todo = new ArrayList<ToDo>(); // 例えばここに 5 6 while(true){ 7 8

追記:
なぜ修正前のだとダメかというと、 while ループの毎回、先頭で
todo が、空のList として新規に初期化されてしまうからです。

投稿2018/01/19 05:07

編集2018/01/19 05:11
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nejirin_boy

2018/01/22 02:27

わかりやすい回答ありがとうございました。
jun68ykt

2018/01/22 02:44

解決されたようですね、よかったです!
guest

0

よくわかってないのですが・・・case 2:の
todo.sort(new Comparator<ToDo>() {・・・はあっていますか?

投稿2018/01/19 04:58

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nejirin_boy

2018/01/22 02:27

ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問