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

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

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

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

Q&A

2回答

4186閲覧

javaで別クラスの配列を参照したい。

white_

総合スコア1

Java

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

0グッド

1クリップ

投稿2020/08/02 05:38

編集2020/08/02 06:20

javaのプログラムにて配列を生成し乱数を代入するクラスを作成し、その配列を別クラスで参照したいと思っています。
その別クラスではGraphicsで乱数に応じて違う図形を描写したいと思っています。
不勉強で申し訳ないのですが、配列を別クラスに引き渡すのはこの方法しか知らないのでどうしても解決方法が分かりません。

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

dicedrawクラスに配列を渡したいのですが、そのクラスにてGraphicsを宣言しているため実引数リストと仮引数リストの長さが異なります。

yacht.java:177: エラー: クラス dicedrawのメソッド drawは指定された型に適用できません。 d.draw(dice); ^ 期待値: Graphics,int[] 検出値: int[] 理由: 実引数リストと仮引数リストの長さが異なります エラー1個

該当のソースコード

java

1class dicedraw extends Canvas{ 2    ・ 3    ・ 4 public void draw(Graphics gc,int dice[]){ 5 for(int i=0; i<5 ;i++){ 6 if(dice[i] == 1) {draw0(gc,i);} 7 else if(dice[i] == 2) {draw1(gc,i);} 8 else if(dice[i] == 3) {draw2(gc,i);} 9 else if(dice[i] == 4) {draw3(gc,i);} 10 else if(dice[i] == 5) {draw4(gc,i);} 11 else if(dice[i] == 6) {draw5(gc,i);} 12 } 13 14 15

java

1class diceroll{ 2 int dice[] = new int[5]; 3 dicedraw d =new dicedraw(); 4 public void roll(int keycode) { 5 6 if(keycode == KeyEvent.VK_SPACE) { 7 for(int i=0; i<5; i++) { 8 dice[i]=((int) (Math.random() * 6)) +1; 9 } 10 11 } 12 d.draw(dice); 13 14 15

試したこと

インスタンス生成を行ってdicedrawクラスに配列を渡しましたが、これだとd.draw(dice)側に期待値としてGraphicsが必要となってしまいます

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

dicedrowクラスにdicerollの結果を保存するメンバを追加すればいいのでは?
もちろんdraw()が呼ばれた際に初期化されていないとエラーが出るため、そのあたりを追加する必要がありますが。

class dicedraw extends Canvas{ public int dice[]; //追加     ・     ・ public void draw(Graphics gc){ for(int i=0; i<5 ;i++){ if(dice[i] == 1) {draw0(gc,i);} else if(dice[i] == 2) {draw1(gc,i);} else if(dice[i] == 3) {draw2(gc,i);} else if(dice[i] == 4) {draw3(gc,i);} else if(dice[i] == 5) {draw4(gc,i);} else if(dice[i] == 6) {draw5(gc,i);} } } class diceroll{ int dice[] = new int[5]; dicedraw d =new dicedraw(); public void roll(int keycode) { if(keycode == KeyEvent.VK_SPACE) { for(int i=0; i<5; i++) { dice[i]=((int) (Math.random() * 6)) +1; } } d.dice=dice;//追加 d.drow(); } }

投稿2020/08/02 06:52

Kaleidoscope

総合スコア257

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

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

white_

2020/08/02 08:42

メンバについて調べました。間違った理解だったら申し訳ないですが、変数を別クラスに渡せるということですか?。ただ、配列型の変数を渡す場合はd.dice=dice;と宣言すると配列型でなく普通の変数になると思うんですけど・・・
Kaleidoscope

2020/08/03 03:03

変数を別のクラスに渡せるというよりは、基本的にクラス内部の変数しか取り扱えないため、読めるように無理やり渡してやってるという感じです。(設計上、行儀の良い方法ではない。) 宣言はdicedrowクラス側で配列として宣言しています(//追加 の部分)ので、 "d.dice=dice;" で宣言しているわけではありません。この行は[配列]=[配列]という形で代入しているだけです。
guest

0

public void draw(Graphics gc,int dice[]){
...
d.draw(dice);

drawメソッドの引数の数が違いますよ

投稿2020/08/02 06:50

編集2020/08/02 06:51
y_waiwai

総合スコア88042

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

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

white_

2020/08/02 08:06

drawメソッドの中にGraphicsの引数を追加すると、dicerollクラスのrollメソッドの中にGraphicsを定義しないといけなくなるようです。実は別クラスにてrollメソッドに変数を代入するように記述していて、(rolldice r = new rolldice();でインスタンス生成。KeyListenerを用いてr.roll(keycode);で変数を代入)。さらに別クラス(implements KeyListenerがある)にGraphicsを入れることになりコードが複雑になると思うのでそれは避けたいのです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問