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

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

新規登録して質問してみよう
ただいま回答率
85.48%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

Q&A

解決済

2回答

11407閲覧

ArrayListに後からキーボード入力で要素を追加する方法

friday_13

総合スコア8

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

0グッド

0クリップ

投稿2018/06/14 08:57

二週間ほど前からJavaの勉強をしている者です。
現在、課題でEclipseを使って学生情報を管理(新規登録、検索、更新、削除)するCUIプログラムを作っているのですが、「新規登録で入力した情報を処理の終了まで保持し、かつ更に新たな学生情報を入力、追加する」プログラムがうまく書けなくて困っています。
要素の追加、更新、削除をする場合は配列ではなくArrayListを使うとのことで書いてはみたものの、リストに追加するべき情報が追加ではなく新規登録の度に置換されてしまいます。

仕様
1.メインメニューから各メニューの処理に飛べるようにする。
(今のところ以下のソースコード内のswitch文で実行できています)
2.新規登録ではキーボードから一人あたりID、名前、生年月日、住所の情報を入力してpsリストに格納、さらにそれをpersonリストに格納する。
(多次元配列をリストでやる感じです)
3.登録した情報はメモリに格納せよとのことなので、閉じるで処理を明示的に終了するまでは各メニューの処理後は終了させずにメインメニューにもどる。
(メモリ格納の場合、終了すると登録情報は破棄されると聞きました)

書き慣れていない為見づらいソースコードで恐縮ですが、なにとぞアドバイスの方お願い致します。

ソースコード

Java

1import java.io.BufferedReader; 2import java.io.IOException; 3import java.io.InputStreamReader; 4import java.util.ArrayList; 5import java.util.Scanner; 6 7class Task1 8{ 9 public static void main(String[] args) throws IOException 10 { 11 System.out.println("----------------------------------------------------"); 12 System.out.println("メインメニュー"); 13 System.out.println("1.学生情報新規登録 (*)"); 14 System.out.println("2.学生情報検索 (*)"); 15 System.out.println("3.学生情報削除"); 16 System.out.println("4.学生情報更新"); 17 System.out.println("5.閉じる (*)"); 18 System.out.println("----------------------------------------------------"); 19 20 BufferedReader br = 21 new BufferedReader(new InputStreamReader(System.in)); 22 23 System.out.println("番号を選択してください。"); 24 String str = br.readLine(); 25 int res = Integer.parseInt(str); 26 27 switch(res) { 28 case 1:;Input.input(); 29 main(args); 30 break; 31 case 2:main(args); 32 break; 33 case 3:main(args); 34 break; 35 case 4:main(args); 36 break; 37 case 5: 38 System.out.println("終了します。"); 39 System.exit(0); 40 break; 41 } 42 } 43} 44 45//リストの作成 46class SL{ 47 ArrayList list; 48 49 public static void create() throws IOException { 50 51 // 2次元配列の宣言 52 ArrayList<ArrayList<String>> person = new ArrayList<ArrayList<String>>(); 53 54 String aa = "a"; 55 56 Scanner sc = new Scanner(System.in); 57 System.out.println(""); 58 59 for(int i = 0; i < 1; i++) { 60 ArrayList<String> ps = new ArrayList<>(); 61 for(int j = 0; j < 1; j++) { 62 System.out.print("ID:"); 63 aa = sc.next(); 64 ps.add(aa); 65 System.out.print("名前:"); 66 aa = sc.next(); 67 ps.add(aa); 68 System.out.print("生年月日:"); 69 aa = sc.next(); 70 ps.add(aa); 71 System.out.print("住所:"); 72 aa = sc.next(); 73 ps.add(aa); 74 } 75 person.add(ps); 76 } 77 78 System.out.println(person); 79 } 80 public ArrayList getlist() { 81 82 return list; 83 } 84} 85 86//登録 87class Input{ 88 89 static void input() throws IOException { 90 91 //学生情報 92 System.out.println("\n学生情報の登録をします。"); 93 SL a = new SL(); 94 95 SL.create(); 96 97 a.getlist(); 98 ArrayList listX = a.getlist(); 99 100 System.out.println("\n\n" + listX); 101 System.out.println("\n登録しました。\n"); 102 103 } 104} 105 106/*//検索 107class Search{ 108 static void search() throws IOException { 109 110 SL a = new SL(); 111 a.getlist(); 112 List listX = a.getlist(); 113 114 } 115} 116 117//削除 118class Delete{ 119 120} 121 122//更新 123class Updata{ 124 125}*/

補足情報(FW/ツールのバージョンなど)

開発環境:Eclipse 4.7 Oxygen 3a(32bit版 Full Edition)

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

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

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

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

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

guest

回答2

0

ベストアンサー

for(int i = 0; i < 1; i++) { ArrayList<String> ps = new ArrayList<>();

ps はループごとにArrayListが生成され、上書きされます
これはループに入る前に、一度だけ生成してください

ArrayList<String> ps = new ArrayList<>(); for(int i = 0; i < 1; i++) {

投稿2018/06/14 09:13

y_waiwai

総合スコア87774

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

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

friday_13

2018/06/15 01:17

ご回答ありがとうございました!ソース改修の参考にさせて頂きます。
guest

0

ご回答いただきありがとうございます。ご指摘いただいた点をふまえ、SLクラス内を以下のように記述することで後から追加できるようになりました。

Java

1//リストの作成 2class SL{ 3 //外側のArrayListを取り出す為の変数 4 static ArrayList listall; 5 6 //内側のArrayListを取り出す為の変数 7 static ArrayList list; 8 9 // 多次元リストの宣言 10 static ArrayList<ArrayList<String>> person = new ArrayList<ArrayList<String>>(); 11 12 public static void create() throws IOException { 13 ArrayList<String> ps = new ArrayList<>(4); 14 String id = "ID"; 15 String name = "NAME"; 16 String birth = "BIRTHDAY"; 17 String adr = "ADDRESS"; 18 19 BufferedReader br = 20 new BufferedReader(new InputStreamReader(System.in)); 21 22 for(int i = 0; i < 1; i++) { 23 System.out.println("IDを入力してください。"); 24 id = br.readLine(); 25 ps.add(id); 26 System.out.println("\n名前を入力してください。"); 27 name = br.readLine(); 28 ps.add(name); 29 System.out.println("\n生年月日を入力してください。(例:XXXX/XX/XX)"); 30 birth = br.readLine(); 31 ps.add(birth); 32 System.out.println("\n住所を入力してください。"); 33 adr = br.readLine(); 34 ps.add(adr); 35 } 36 37 person.add(ps); 38 39 listall = person; 40 list = ps; 41 } 42 43 public ArrayList getlist1() { 44 45 SL sl = new SL(); 46 return sl.listall; 47 } 48 public ArrayList getlist2() { 49 50 SL sl = new SL(); 51 return sl.list; 52 } 53} 54

大変助かりました。またよろしくお願い致します。

投稿2018/06/15 06:16

編集2018/06/18 00:25
friday_13

総合スコア8

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問