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

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

詳細はこちら
Java

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Javaアプレット

Javaアプレットは、Webページに組み込まれて実行されるJavaアプリケーションの形式です。Java SE 11で廃止となりました。

Q&A

解決済

3回答

3205閲覧

java アプレット 二次元配列の問題がわかりません

mcdonald-mos

総合スコア8

Java

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Javaアプレット

Javaアプレットは、Webページに組み込まれて実行されるJavaアプリケーションの形式です。Java SE 11で廃止となりました。

0グッド

0クリップ

投稿2018/07/16 03:33

編集2018/07/16 17:30

java プログラミング 以下の問題をやっているのですが全然わかりません。特にわからないのは2次元配列の中0か一の値を入れて初期化するところです。どなたかわかる方はいらしゃらないでしょうか。。。。 

7×8の大きさの2次元配列を宣言して,整数0または1でランダムに初期化する.その上で,図2のように,配列の大きさ7×8に対応させて,横7×縦8のマス(7×8個の正方形)を描くプログラムを作成しなさい.マスを塗りつぶす色は,対応する配列の要素が0であれば黒色,1であれば緑色に設定すること.また,テキストフィールドにマスを指定するための(x,y)が入力され,Actionボタンが押された場合,図3のように該当するマスの色を反転できるようにすること.イメージ説明
追記
二次元配列のなかみをランダムで0か1に初期化することはできたのですがそのあとの後半の問題文「actionボタンが押された場合、図3のように該当するマスの色を反転できるようにすること」の部分がよくわからないです。javaアプレットに詳しい方、よろしければ助言をいただけないでしょうか

java

1 2import java.awt.*; 3 4import java.applet.*; 5import java.awt.event.*; //(1) 6import java.util.Random; 7 8 9 10public class Program2Lesson8 extends Applet implements ActionListener{ 11TextField yoko,tate; 12Button action; 13Random rnd = new Random(); 14 15 16 17 18int[][] masu = new int [7][8]; 19 20 21public void init() { 22 yoko = new TextField("",4); 23 yoko.addActionListener(this); 24 add(yoko); 25 26 tate = new TextField("",4); 27 tate.addActionListener(this); 28 add(tate); 29 30 action = new Button("Action"); 31 action.addActionListener(this); 32 add(action); 33 34 35 } 36 37 public void paint (Graphics g) { 38 39 for(int i=0; i<masu.length;i++) { 40 41 for(int j=0; j<masu[1].length; j++) { 42 int r =rnd.nextInt(2); 43 44 masu[i][j] =r; 45 46 if(masu[i][j]==0) { 47 g.setColor(Color.black); 48 }else if(masu[i][j]==1) { 49 g.setColor(Color.green); 50 } 51 g.fillRect(50+20*j, 100+20*i, 20, 20); 52 } 53 54 55 } 56 } 57 58 59 60 61 62 63public void actionPerformed(ActionEvent e) { 64 int x= Integer.parseInt(yoko.getText()); 65 int y= Integer.parseInt(tate.getText()); 66 67 if(masu[x][y]==0) { 68 69 70 71 } 72 73} 74 75} 76 77

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

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

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

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

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

guest

回答3

0

ベストアンサー

まず、一度に問題を解こうとせずに、分割統治法を使って問題は解いたほうがいいです。

7×8の大きさの2次元配列を宣言して,整数0または1でランダムに初期化する.

この問題は2つの問題に分割できます。

  1. 7×8の大きさの2次元配列を宣言する。
  2. 整数0または1でランダムに初期化する。

問題1に関しては
グーグル検索にJAVA 2次元配列 代入 初心者と入力して、キーワード検索すると
【初心者からわかる】Javaの多次元配列の使い方のページがヒットします。
リンク先の多次元配列のサンプルプログラム

問題2に関して
グーグル検索にJava ランダム ドキュメントで検索すると
nextInt

グーグル検索にJava Random nextInt 使い方で検索すると
乱数の作成(nextInt・random)


以下は余談です。
1次元配列の値を生成した乱数値で埋めたい時は、乱数を格納した配列を複数のクラスで共有したい。で回答しましたが、Random#intsが使えます。
ネットに出ているコードサンプルはJava 1.8リリース日(2014年3月18日)以前の古いコードが多いので、参考情報として書いておきます。

Java

1import java.util.Random; 2import java.util.Arrays; 3 4class Wandbox 5{ 6 public static void main(String[] args) 7 { 8 final Random rnd = new Random(); 9 final int size = 10; 10 rnd.setSeed(42); // テスト再現性を保証するため。 11 int[] samples = rnd.ints(0, 2).limit(size).toArray(); 12 System.out.println(Arrays.toString(samples)); 13 } 14}

問題はvoid paint 内の部分でランダムに配列の中に0か1を入れたつもりなのですが実行してみると緑一色にしかならなくて困ってます。

そういう時はまず公式ドキュメントを確認します。Random#nextInt
この乱数ジェネレータのシーケンスを使って、0から指定された値の範囲(0は含むが、その指定された値は含まない)で一様分布のint型の擬似乱数値を返します。

Java

1int r = new Random().nextInt(1); // 指定した値が1のときにどーなるかーという話です。 2int l = new Random().nextInt(1);

あとRandomのインスタンスはpaintメソッド直下で宣言してくださいな。

Java

1public void paint (Graphics g) { 2 final Random rnd = new Random(); // このように 3 for(int i=0; i<masu.length;i++) { 4 // 後略

反転とはなにかをまず考えて
1 → 0
0 → 1
これをコードに記述すればいいのです。

ヒントは剰余演算子とインクリメント演算子

そして再描画repaintを呼び出します。


repaintしてしまうと結局マスの色全部が変わってしまってテキストフィールドに入力した配列のマスの色のみを変えるということができないです…

どうして変わるのかをまず、考えてください。
答えを云うとこのページApplet 基本メソッドを見てくださいな。Appletの各イベントが呼ばれるタイミングが記載されています。

動作確認してませんが、こんな感じにstartメソッドを作ればよいのです。

Java

1 public void start() { 2 for(int i=0; i<masu.length;i++) { 3 for(int j=0; j<masu[i].length; j++) { 4 masu[i][j] = rnd.nextInt(2); 5 } 6 } 7 }

投稿2018/07/16 07:55

編集2018/07/17 13:38
umyu

総合スコア5846

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

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

mcdonald-mos

2018/07/17 12:47

以下のソースコードでやってみたのですがrepaintしてしまうと結局マスの色全部が変わってしまってテキストフィールドに入力した配列のマスの色のみを変えるということができないです… ```java import java.awt.*; import java.applet.*; import java.awt.event.*; //(1) public class Program2Lesson8 extends Applet implements ActionListener{ //フィールド TextField yoko,tate; Button action; int[][] masu = new int [7][8]; int x,y; //initメソッド public void init() { //テキストフィールドクラスのインスタンスの作成 yoko = new TextField("",4); //テキストフィールドクラスののインスタンスにアプレットを登録する yoko.addActionListener(this); //アプレットに登録する add(yoko); tate = new TextField("",4); tate.addActionListener(this); add(tate); //ボタンクラスのインスタンスを作成 action = new Button("Action"); //ボタンクラスのインスタンスをアプレットに登録する action.addActionListener(this); //アプレットに登録する add(action); } //paintメソッド public void paint (Graphics g) { //7×8のマスを作る for(int i=0; i<masu.length;i++) { for(int j=0; j<masu[1].length; j++) { //配列の中身に0か1の乱数を入れる masu[x][y] =(int)(Math.random()*2); //配列の中身が0ならば黒色に、1ならば緑色にする if(masu[x][y]==0) { g.setColor(Color.black); }else if(masu[x][y]==1) { g.setColor(Color.green); } //四角形を作る g.fillRect(50+20*j, 100+20*i, 20, 20); } } } //actionPerfomedメソッド public void actionPerformed(ActionEvent e) { //テキストフィールドから整数を取得する int x= Integer.parseInt(yoko.getText()); int y= Integer.parseInt(tate.getText()); //テキストフィールドに入力した配列の中身を入れ替える if(masu[x][y]==0) { masu[x][y]++; } else if(masu[x][y]==1){ masu[x][y]--; } repaint(); } } ```
mcdonald-mos

2018/07/17 13:50

長い間丁寧に教えていただきありがとうございました!!どうにか完成させることができました!!また何か機会があればよろしくお願いします
guest

0

回答ではありませんが、Java AppletはJava 9より非推奨になり、Java 11で廃止されました。練習問題とやろうとしているのならパスして他の問題に取り組まれては?
Java Applet

投稿2018/07/16 03:37

Orlofsky

総合スコア16417

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

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

mcdonald-mos

2018/07/16 03:40

ごめんなさい、これ通信大学の課題なので必ずやらなくちゃいけないんです。いくらググってもわからないし学校に渡されたテキストも全然乗ってないしでどうすればいいかわからなくて困っています。もし時間が余っていたら教えていただけないでしょうか
Orlofsky

2018/07/16 03:54

わたしなら通信大学にJava AppletはJava 9より非推奨になり、Java 11で廃止されたから、もう需要のない Java Applet を習ってどうすんの?なんで課題を変更しないのか?って抗議します。 機関銃を使っている時代に火縄銃を習っても戦いには勝てません、って。
mcdonald-mos

2018/07/16 04:02

質問しようとは思っていますが大学が大学がたった一人の小さい抗議で課題を変更するとは思えません。自分でも何でこんな使われてない古い機能習ってるのか全然理解できないんですがやるしかないんです(-_-;) 一番疑問なところは二次元配列 int sample [][]= new int[8][7];配列の中身にランダムで0か1の乱数を入れることなのですがググっても出てこなくて。。。どうすればいいのでしょうか。。。
Orlofsky

2018/07/16 09:50

[質問]に間違っていても良いから今まで書いたコードを載せた方が適切なコメントが付くかと。 コードは https://teratail.com/help#about-markdown の[コードを入力]を使ってください。
guest

0

int sample [][]= new int[8][7];配列の中身にランダムで0か1の乱数を入れることなのですがググっても出てこなくて。。。

「Java ランダム」とか「Java 乱数」とかで検索すれば普通に出てくると思いますが…。

乱数や二次元配列はJavaアプレットとは直接関係ない箇所なので、分けて考えるのがよいです。

投稿2018/07/16 07:52

fiveHundred

総合スコア10152

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問