• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:考えてもちっともいい案が出てこなくって・・・)

Javaで配列の要素を表示する方法

このQ&Aのポイント
  • Javaの配列要素を表示する方法について説明します。
  • 例外が発生している原因は、phrasesが空のためです。phrasesにPの中身を代入する必要があります。
  • 具体的には、obj1.sayメソッド内でsay(0)を呼び出していますが、say(int i)メソッド内でphrase[i]を使っているため、phraseに要素を代入しておく必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

何がしたいのかわからんけど、 phrases=Pがエラーなのは ActからStageが見えてないからじゃ? こうすれば? class Stage { String[] P = { "Hi", "Hello", "Bye" }; public static void main(String[] args) { Act obj1 = new Act(); obj1.say(); } } class Act { public String phrase[]; void say(int i) { Stage stage = new Stage(); phrase = stage.P; System.out.println(phrase[i]); } void say() { say(0); } }

skybkird
質問者

お礼

有難うございます。 本当に単純にActからStageがみえていないだけでした。 けれどこれmainでPを宣言をすると何故かエラーチェックが"Pが解決できていないかもしくはフィールドではありませんという"エラーがくるんですよね なぜでしょう?

その他の回答 (5)

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.6

> コーディング最中にphrases=Pを打ちこむと’Pが解決されていません'ってエラーがでます これの原因は分かったと思いますが、 > mainでPを宣言をすると何故かエラーチェックが"Pが解決できていないかもしくはフィールドではありませんという"エラーがくるんですよね > なぜでしょう? フィールドとローカル変数の区別を付けてください。 ・mainメソッドの中で宣言したものはローカル変数。前にStage.とつけようが何をしようが、mainメソッドの外からはアクセスできません。 ・メソッドの外で宣言したものはStageクラスのフィールド。フィールドにはクラスフィールドとインスタンスフィールドの2種類があって、Actからアクセスする方法がそれぞれ異なります。ANo.4さんの書き方はインスタンスフィールド。

skybkird
質問者

お礼

ご親切に有難うございます。 だからmainで宣言している限りmain部分でしかアクセス出来なかったんですね。

回答No.5

補足:No.4です。 結局はStageにどこまでアクセスさせるかと思うんだけど。 Main()がstaticな為、回りくどくなってるけど interface InterfaceP { public String[] getP(); } class Stage implements InterfaceP { private static String[] P = { "Hi", "Hello", "Bye" }; @Override public String[] getP() { return P; } public static void main(String[] args){ Act obj1 = new Act(new Stage()); obj1.say(); } } class Act { public String phrase[]; public Act(InterfaceP test) { phrase = test.getP(); } void say(int i) { System.out.println(phrase[i]); } void say() { say(0); } } 頑張って勉強してくれ。

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.3

質問文にあるプログラムに最小限の変更を加えるなら、Act obj1=new Act();とobj1.say();の間に obj1.phrase=P; を追加してください。"Hi"がprintlnされるようになります。 お勧めはしませんけど。 > 出力しているのはphrasesなのでphrases=Pにすれば良いと考えています > けどどうやってもエラーが帰ります。 具体的には何をどうやろうとして、どんなエラーが返ったのですか? また、エラーが返ったのはコンパイル時ですか、実行時ですか?

skybkird
質問者

お礼

いやコーディング最中にphrases=Pを打ちこむと’Pが解決されていません'ってエラーがでます またPを渡さずそのまま出力すると今回の質問に書いてある例外が返ってきます。

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

方法はいくつかあります。 たとえば、ActクラスにString[]を引数に取るコンストラクタを定義してmainメソッドでPを渡してあげる、とか。

skybkird
質問者

お礼

ご親切に有難うございます う~ん・・・言葉で表せるほど上達していないのでなんとも言えないです。 とりあえず参考にさせて戴きます

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

何をしたのかがわからないし どんなエラーが出たのかも分からないわね。 もしコンパイルエラーだったら 変数のスコープを勉強しなおせって 言いたくなるので 実行時エラーであることを期待するけど。

関連するQ&A

専門家に質問してみよう