🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

Java

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

Eclipse

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

1013閲覧

配列に格納した情報を他のクラスから参照したい

moyashikun

総合スコア11

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

Java

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

Eclipse

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2019/11/06 02:46

編集2019/11/06 03:03

前提・実現したいこと

配列に格納した情報を他のクラスから参照したい

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

他のクラスから参照するとnullになってしまう

該当のソースコード

java

1package test2; 2 3public class Main { 4 public static void main(String args[]){ 5 SetInfo setin = new SetInfo(); 6 OutInfo outin = new OutInfo(); 7 8 setin.setI(); 9 outin.outI(); 10 } 11}

java

1package test2; 2 3public class SetInfo { 4 String[] name = {"yoshida","soken","moruboru"}; 5 int[] id = {10,20,30}; 6 7 Kakunou kaku = new Kakunou(); 8 9 public void setI(){ 10 for(int i = 0 ; i < 3 ; i++){ 11 kaku.setName(i, name[i]); 12 kaku.setId(i, id[i]); 13 } 14 } 15 16}

java

1package test2; 2 3public class OutInfo { 4 Kakunou kaku = new Kakunou(); 5 public void outI(){ 6 for(int i=0;i<3;i++){ 7 System.out.println(kaku.getId(i) + ":" + kaku.getName(i)); 8 } 9 } 10}

java

1package test2; 2 3public class Kakunou { 4 private String[] name = new String[3]; 5 private int[] id = new int[3]; 6 7 public void setName(int i,String name){ 8 this.name[i] = name; 9 } 10 11 public void setId(int i,int n){ 12 this.id[i] = n; 13 } 14 15 public String getName(int i){ 16 return this.name[i]; 17 } 18 19 public int getId(int i){ 20 return this.id[i]; 21 } 22}

試したこと

Kakunouの変数をpublicにしてkaku.name[i]で呼び出してみてもnullになってしまう

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

JDK 8
Version: Neon.3 Release (4.6.3)

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

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

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

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

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

jimbe

2019/11/06 02:55

コードは, 入力欄の上にある <code> を押して出てくる ``` の間の"コード"を置き換える形にして頂けますでしょうか. (マークダウン) そうすると専用の枠内でインデントが有効になって表示されるようになり, 枠内右上に[+]と表示されてコードがクリップボードにコピーできるようになります. また, "ここに言語を入力" という文字列を "java" に書き換えますと, java のキーワードのフォントが変わる等, さらに見やすくなります.
m.ts10806

2019/11/06 02:56

コードブロック(マークダウン)はファイルごとに分けてください。でないと正しく再現確認できませんので。(できればPackageも書いてほしい)
moyashikun

2019/11/06 03:04

失礼しました 修正しました
guest

回答2

0

setin.setI() でセットした内容を、 outin.outI() で出力したいと理解しました。

もしそうであれば、SetInfo クラスに、 getKoku() メソッドを作って、Kokunou クラスを戻りの型に指定して、 SetInfo クラスが保持する Kokunou クラスのインスタンスを返すようにしましょう。いわゆる getter を追加するということですね。

次に OutInfo クラスの outI() メソッドに引数を追加します。 outI(Kokunou koku) ですね。そして、outI() メソッド内の Kokunou koku = new Kokunow() の行を削除します。

最後に outin.outI() に、 setin.getKoku() の結果を渡します。 outin.outI(setin.getKoku()) のように。

これでコンパイルして実行すれば、outI メソッドの処理で、渡された Kokunou クラスのインスタンスの内容を表示してくれるはずです。

何が問題だったかというと、new 演算子で新しいインスタンスを作成するごとに、中身は初期状態のものになってしまっていたという点です。つまり SetInfo クラスの setI メソッドで作成した Kokunou クラスのインスタンスとは別のものです。
OutInfo クラスの outI メソッドで新しい Kokunou クラスのインスタンスを作ってその中身を表示していたため、中身は初期状態のままでしかないのです。

ですので、上の対処方法で示したのは次のような考え方です。

  1. setI メソッドで作成した Kokunou クラスのインスタンスを取得できるようにして
  2. 取得した Kokunou クラスのインスタンスを OutInfo クラスの outI メソッドに引き渡せるようにし
  3. outI メソッドは引数の Kokunou クラスのインスタンスの中身を表示する、

投稿2019/11/06 04:03

編集2019/11/06 04:05
ironya

総合スコア456

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

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

moyashikun

2019/11/06 15:09

ありがとうございます!
guest

0

ベストアンサー

単純に, Kakunou オブジェクトを外で作り, setInfo/outInfo に共有させては如何でしょうか.

java

1public class Main { 2 public static void main(String args[]){ 3 Kakunou kaku = new Kakunou(); //追加 4 SetInfo setin = new SetInfo(kaku); //パラメータ追加 5 OutInfo outin = new OutInfo(kaku); //パラメータ追加 6 7 setin.setI(); 8 outin.outI(); 9 } 10 11 static class Kakunou { 12 private String[] name = new String[3]; 13 private int[] id = new int[3]; 14 15 public void setName(int i,String name){ 16 this.name[i] = name; 17 } 18 19 public void setId(int i,int n){ 20 this.id[i] = n; 21 } 22 23 public String getName(int i){ 24 return this.name[i]; 25 } 26 27 public int getId(int i){ 28 return this.id[i]; 29 } 30 } 31 32 static class SetInfo { 33 private String[] name = {"yoshida","soken","moruboru"}; 34 private int[] id = {10,20,30}; 35 private Kakunou kaku; 36 SetInfo(Kakunou kaku){ //コンストラクタ追加 37 this.kaku = kaku; 38 } 39 40 public void setI(){ 41 for(int i = 0 ; i < 3 ; i++){ 42 kaku.setName(i, name[i]); 43 kaku.setId(i, id[i]); 44 } 45 } 46 } 47 48 static class OutInfo { 49 private Kakunou kaku; 50 OutInfo(Kakunou kaku){ //コンストラクタ追加 51 this.kaku = kaku; 52 } 53 public void outI(){ 54 for(int i=0;i<3;i++){ 55 System.out.println(kaku.getId(i) + ":" + kaku.getName(i)); 56 } 57 } 58 } 59}

投稿2019/11/06 04:26

jimbe

総合スコア13202

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

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

moyashikun

2019/11/06 15:09

修正したプログラムまでありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問