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

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

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

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

Q&A

3回答

4606閲覧

javaの二次元配列について

Syouta

総合スコア10

Java

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

0グッド

1クリップ

投稿2016/02/16 00:48

編集2016/02/16 01:04

javaの二次元配列について具体的に教えてください
例:String 型の 2 次元配列 data を定義し、氏名、身長、体重を保持する。
3名分の情報が入る要素数で定義すること。 変数は任意で自由に宣言してよいが、配列の宣言は data 以外にしないこと。 身長、体重も String 型で格納しておいてよい。
メソッド
氏名、身長、体重をキーボードから入力させ data 配列に代入する。 3名分の入力を繰り返し命令で行うこと。 最後に入力されたすべての情報を出力する。氏名、身長、体重の出力の間隔はタブで調整 する。
入力される値は、すべて正しい値が入力されると考えて作成してよい。

この場合はどうすればいいでしょうか?
追記
まず最初にimport java.io.*;
{
class ○○

public static void main(String[] args) throws IOException
{
BufferedReader br =
new BufferedReader( newInputStreamReader(System.in));

となるのはわかるのですが二次元配列をどう使えばいいかわかりません

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

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

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

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

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

sk_3122

2016/02/16 01:47

まず、キーボードからの入力とありますが、コンソールアプリケーションなのでしょうか、web画面なのでしょうか。また出力とあるのは、画面への出力でしょうか?ファイル等に出すのでしょうか。この質問で聞きたいのは二次元配列の使い方なのでしょうか?であれば、さすがにまず「Java 二次元配列」で検索した方が早いと思います。自分で分かるところまでは書いて、分からない部分だけ質問した方が回答も付きやすいですよ。演習か何かでしょうか?頑張ってください。
coco_bauer

2016/02/16 02:09

この質問は、宿題の丸投げでしょうか?
guest

回答3

0

二次元配列について知りたいということなので、考え方を少し。

自分は配列といわれたらだいたい、このようにイメージを頭の中で作っています。
二次元配列は、配列の中に配列が入っています。
二次元配列
dataの中身のイメージはこんな感じですかね。
白の配列が1人分の箱、オレンジの配列が人数分ですね。
この配列全体がdataになり、1人ずつ、氏名・身長・体重を詰めていけばいいだけです。

配列の宣言の仕方は・・・大丈夫ですよね?
※ もしここから躓いているなら、もう一度復習した方がいいかと思います。

あとは、うまくループを使って配列の1つ1つの要素にアクセスできればOKです。

課題がんばってください。

投稿2016/02/16 03:00

kaputaros

総合スコア1844

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

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

0

まず、先生の言ってることはあまり宜しくない。
身長も体重もstring型でいい、というのが納得いかない。

java

1public class HumanDto { 2 private String name; 3 private double weight; 4 pruvate double height; 5 // こんすとらくた、ゲッターズ飯田セッター省略 6}

こういう入れ物を用意する。これが、2次元配列の内側の配列と等価になる。
次に宣言と初期化

java

1HumanDto[] datas = new HumanDto[] { 2 new HumanDto("katou", 175.5, 63D), 3 new HumanDto("sakai", 195.2, 88D), 4 new HumanDto("edogawa", 160.3, 55.4) 5}; 6

これで、宣言は、1次元配列だが、要素が複数オブジェクトを所有する2次元配列と等価になりました。

通常の2次元配列では、参照する場合、
xxx[2][0] などといみふめいな記号で指定するが、意味不明では無いが、プログラムが長くなると前に書いていた変数の内容を忘れがちで、今記述しようとしてるところと、宣言したところを行ったり来たりすることはよくある。
一方、2次元配列風にしたクラス配列の場合、xxx[1].getWeight() などと参照できる。[0] よりは、全然読みやすいし、xxx 配列は、何かのクラスを要素に持ってる、って3日後に見直しても分かります。
3日立てば、書いたこと全部忘れています。

あとは適当に、入門書見て自力で解決できるといいですね。

2次元配列の初期化について、
これも先生の問題があまり宜しくないのですが、縦に伸びる配列の縦の要素が可変で、2次元配列で実現するには適当な問題ではない、ということです。
何人分入力されても動くようにするためには、配列ではなくて、可変要素に対応したリストというクラスを使います。2次元配列で無理矢理実現することが目的ならせんせいに回答の見本を見せてもらった方がいいですね。可変という部分、幾つ入るかは不明という部分は、固定要素で宣言しないと利用できない配列で実現するのは初心者には無理だと思うね。

List<String[]> list = new ArrayList<>();
これに、System.in から取得した文字列を一次元配列に直して、詰めてあげ、
最後に、list.toArray() で二次元配列が取得できます。

お、見落としてた。3名分て書いてある。なら、
固定で持っちゃえばいいので、
String[][] datas = new String[3][3];
として、適当にやっちゃってください。
身長と体重は文字のまんまで良いなんて、、、、ってことは、つぎの問題は、身長、体重は double型に直してってなりそうですね。

となると、先生の教え方は正しいかも。

投稿2016/02/16 02:51

ipadcaron

総合スコア1693

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

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

0

こう使います

java

1import java.io.*; 2 3 4class IU{ 5 6 7public static void main(String[] args){ 8 9 10String[][] data=new String[3][3]; 11 12BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 13 14for(int a=0;a<3;a++){ 15 16System.out.println(a+1+"人目の情報入力"); 17 18for(int b=0;b<3;b++){ 19 20String s=""; 21switch(b){ 22 23case 0:s="氏名:"; 24break; 25 26case 1:s="身長:"; 27break; 28 29case 2:s="体重:"; 30break; 31 32default: 33break; 34 35} 36 37System.out.print(s); 38 39try{ 40data[a][b]=br.readLine(); 41}catch(Exception e){} 42 43 44} 45 46} 47System.out.println(); 48 49for(int a=0;a<3;a++){ 50 51System.out.println(a+1+"人目の情報"); 52 53for(int b=0;b<3;b++){ 54 55String s=""; 56switch(b){ 57 58case 0:s="氏名:"; 59break; 60 61case 1:s="身長:"; 62break; 63 64case 2:s="体重:"; 65break; 66 67default: 68break; 69 70} 71 72 73System.out.println(s+data[a][b]); 74 75 76} 77} 78 79 80 81} 82 83 84}

投稿2016/10/31 05:11

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kaputaros

2016/11/04 01:17 編集

> System.out.println(a+1+"人目の情報入力"); これだと文字列の連結になってしまうので、 01人目の情報入力 11人目の情報入力 ・・・ となってしまいます。計算させたいのであれば、 System.out.println( (a+1) +"人目の情報入力"); と()で囲ってあげる必要があると思います。 それと、最初のfor文内にあるswitch文は必要ですか?? もし必要というのならば、下のfor文内の処理と同じなので、 外に出してメソッド化してあげたほうがいいかと。
退会済みユーザー

退会済みユーザー

2016/11/04 01:38

>これだと文字列の連結になってしまう 実際に一度でもコンパイルして実行して見たんですか ちゃんと1人目 2人目と表示されますよ・・・ 数値は左側から足し算されてから右に初めて出くわしたStringと結合するんです 知らなかったのですか
kaputaros

2016/11/04 01:41 編集

そうですか、それは失礼しましたね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問