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

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

新規登録して質問してみよう
ただいま回答率
85.48%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Java

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

配列

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

Q&A

3回答

1222閲覧

同じクラスで異なるメソッド間で同じ配列を利用したい

ai..

総合スコア0

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Java

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

配列

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

0グッド

0クリップ

投稿2021/11/23 20:07

前提・実現したいこと

javaで同じクラスで異なるメソッド間で同じ配列を利用したいのですが、方法が全く分からず、行き詰っています、、、。
状況としてはRectSample02というClassの中に、openとpaintというメソッドがありまして、openのメソッドで定義した配列をpaintで使いたいという状況です。
うまく配列を持ってくることができずエラーが出てしまいます。
超初心者なので初歩的な質問になるかもしれませんがよろしくお願いいたします。

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

data を変数に解決できません

該当のソースコード

JAva

1package Sample2; 2import java.awt.Color; 3import java.awt.Graphics; 4import java.awt.event.ActionEvent; 5import java.awt.event.ActionListener; 6import java.io.BufferedReader; 7import java.io.File; 8import java.io.FileReader; 9 10import javax.swing.JFileChooser; 11import javax.swing.JFrame; 12import javax.swing.JMenu; 13import javax.swing.JMenuBar; 14import javax.swing.JMenuItem; 15public class RectSample02 extends JFrame { 16 private static final long serialVersionUID = 1L; 17 public RectSample02() { 18 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 19 // メニュー作成 20 JMenuBar mb = new JMenuBar(); 21 JMenu m = new JMenu("ファイル(F)"); 22 m.setMnemonic('F'); 23 JMenuItem item1 = new JMenuItem("開く(O)"); 24 item1.setMnemonic('O'); 25 // メニューを選んだ時の動作を設定 26 item1.addActionListener(new ActionListener() { 27 @Override 28 public void actionPerformed(ActionEvent e) { 29 open(); 30 } 31 }); 32 m.add(item1); 33 mb.add(m); 34 setJMenuBar(mb); 35 36 // フレームを表示 37 setVisible(true); 38 } 39 40 41 // ファイル選択ダイアログを表示し、選択したファイルをラベルに設定 42 // するメソッドを呼び出す 43 private void open() { 44 45 BufferedReader br = null; 46 JFileChooser chooser = new JFileChooser(); 47 //デフォルトの選択ファイルを指定 48 chooser.setSelectedFile(new File("C:/CSV1/csv1/0501C.csv")); 49 //ダイアログを表示 50 51 chooser.showOpenDialog(null); 52 //ダイアログの選択結果を取得 53 File file = chooser.getSelectedFile(); 54 if(file != null) { 55 System.out.println("選択したファイルを含んだフルパス:" + file.getPath()); 56 System.out.println("選択したファイルのあるディレクトリ(フォルダ):" + file.getParent()); 57 System.out.println("選択したファイルのファイル名:" + file.getName()); 58 }else { 59 System.out.println("選択してくれなかったよ(TT)"); 60 } 61 // データの最大個数 62 final int MAX_DATA_NUMS = 1700; 63 // データを格納する2次元配列 64 String[][] data = new String[MAX_DATA_NUMS][]; 65 try { 66 67 br = new BufferedReader(new FileReader(file)); 68 // readLineで一行ずつ読み込む 69 int index = 0; 70 String line; 71 while ((line = br.readLine()) != null) { 72 // lineをカンマで分割し、配列dataに保持 73 data[index] = line.split(","); 74 index++; 75 } 76 // catch-finally部分は同様なので省略 77 } catch (Exception e1) { 78 System.out.println(e1.getMessage()); 79 } finally { 80 try { 81 br.close(); 82 } catch (Exception e1) { 83 System.out.println(e1.getMessage()); 84 } 85 } 86 87 // 配列に格納したデータを表示(データ間にスペース) 88 for (int i = 0; i < MAX_DATA_NUMS; i++) { 89 // データがなくなったら終了 90 if (data[i] == null) break; 91 for (int j = 0; j < data[i].length; j++) { 92 System.out.print(data[i][j] + " "); 93 } 94 System.out.println(); 95 } 96 97 } 98 99 public void paint(Graphics g){ 100 super.paint(g); 101 //コンテナのサイズ 102 //縦幅 103 int WSIZE = 10; 104 //横幅 105 int HSIZE = 20; 106 int a =0; 107 int px=0,py=0; 108 int x=0,y=0; 109 110 111 g.setColor(Color.WHITE); 112 g.fillRect(0, 60, 1300, 900); 113 114 for(int i=0; i<0; i++) { 115 116 String d3=data[i][4]; 117 int r3=Integer.parseInt(d3); 118 119 if(r3==1) { 120 g.setColor(Color.RED); 121 }if(r3==2) { 122 g.setColor(Color.BLUE); 123 }if(r3==3) { 124 g.setColor(Color.YELLOW); 125 } 126 String d2=data[i][3]; 127 int r2=Integer.parseInt(d2); 128 x=350-10*(10-r2); 129 px = -2*x+1200; 130 String d=data[i][2]; 131 int r=Integer.parseInt(d); 132 y=325-5*(60-r); 133 py = 2*y; 134 g.fillRect(px, py, 20, 10); 135 136 } 137 138 //蔵置場所描写 139 g.setColor(Color.black); 140 for(a=0; a<59; a++) 141 { 142 g.drawLine(500,WSIZE*a+80,WSIZE*20+500,WSIZE*a+80); // 横線 143 } 144 for(a=0; a<11; a++) 145 { 146 g.drawLine(HSIZE*a+500,80,HSIZE*a+500,HSIZE*32+20); // 縦線 147 } 148 149 } 150 public static void main(String[] args) { 151 JFrame f = new RectSample02(); 152 f.setTitle("コンテナヤードサンプル"); 153 f.setSize(1300,900); 154 f.setBackground(Color.WHITE); 155 f.setVisible(true); 156 } 157 158}

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

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

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

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

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

m.ts10806

2021/11/23 20:09

インデントがグチャっとしていてコードが読みづらいかと思います。 調整してください。(可能ならコードフォーマット機能のあるエディタ利用を)
guest

回答3

0

共有したい変数を、クラスのメンバ変数として定義すればよいかと思います。
(コード例がなくてすみません)

投稿2021/11/24 00:11

plasticgrammer

総合スコア629

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

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

0

投稿2021/11/24 02:00

jimbe

総合スコア12646

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

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

0

クラス内の話なら、その配列をクラス変数として確保してやればいいだけですね

投稿2021/11/24 00:50

y_waiwai

総合スコア87774

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問