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

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

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

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

Q&A

解決済

3回答

1848閲覧

多重配列の値を取り出したい

sobue

総合スコア329

Java

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

0グッド

0クリップ

投稿2016/04/06 13:27

編集2016/04/06 14:20

java

1package picross; 2 3import static picross.Commonconst.HI; 4import static picross.Commonconst.MASS; 5import static picross.Commonconst.SIZE; 6import static picross.Commonconst.WI; 7 8import java.awt.BorderLayout; 9import java.awt.Color; 10import java.awt.Dimension; 11import java.awt.Graphics; 12import java.awt.event.ActionEvent; 13import java.awt.event.ActionListener; 14import java.awt.event.MouseEvent; 15import java.awt.event.MouseListener; 16import java.io.BufferedWriter; 17import java.io.File; 18import java.io.FileNotFoundException; 19import java.io.FileWriter; 20import java.io.IOException; 21import java.awt.FileDialog; 22import java.awt.Frame; 23 24import javax.imageio.stream.FileCacheImageInputStream; 25import javax.swing.JButton; 26import javax.swing.JFileChooser; 27import javax.swing.JFrame; 28import javax.swing.JPanel; 29 30 31 32public class Picross extends JFrame implements ActionListener { 33 34 JPanel buttonpanel = new JPanel(); 35 JButton btn = new JButton("CSV出力"); 36 37 public Picross() { 38 //フレームの設定 39 setTitle("ピクロス"); 40 setDefaultCloseOperation(EXIT_ON_CLOSE); 41 42 //ボタンの場所の設定 43 btn.addActionListener(this); 44 buttonpanel.add(btn); 45 add(buttonpanel,BorderLayout.SOUTH); 46 47 //ボードの場所の設定 48 Board board = new Board(); 49 add(board,BorderLayout.CENTER); 50 51 //全てをまとめる 52 pack(); 53 } 54 55 public static void main(String[] args) { 56 // TODO 自動生成されたメソッド・スタブ 57 Picross picross = new Picross(); 58 picross.setVisible(true); 59 } 60 61 @Override 62 public void actionPerformed(ActionEvent e) { 63 // TODO 自動生成されたメソッド・スタブ 64 System.out.println("テスト成功です"); 65 try{ 66 FileOutputStream fos =new FileOutputStream("CSV出力.txt"); 67 OutputStreamWriter osw= new OutputStreamWriter(fos, "Shift_JIS"); 68 BufferedWriter bfw =new BufferedWriter(osw); 69 for(int i=0;i<boardarray.length;i++){ 70 71 72 73 } 74 75 JFileChooser fileChooser = new JFileChooser(); 76 //SaveDialogを表示させる 77 fileChooser.showSaveDialog(null); 78 79 80 } 81 class Board extends JPanel implements MouseListener { 82 int[][] boardarray = new int[MASS][MASS]; 83 JButton btn = new JButton("CSV出力"); 84 85 public Board() { 86 // TODO 自動生成されたコンストラクター・スタブ 87 setPreferredSize(new Dimension(WI, HI)); 88 89 90 addMouseListener(this); 91 92 boardarray[5][5] = 1; 93 } 94 95 public void paint(Graphics graphi) { 96 // graphi.setColor(Color.GRAY); 97 // graphi.fillRect(0, 0, HI, WI); 98 99 for (int x = 0; x < MASS; x++) { 100 for (int y = 0; y < MASS; y++) { 101 if (boardarray[x][y] == 1) { 102 graphi.setColor(Color.BLACK); 103 graphi.fillRect(x * SIZE, y * SIZE, SIZE, SIZE); 104 } else if (boardarray[x][y] == 0) { 105 graphi.setColor(Color.GRAY); 106 graphi.fillRect(x * SIZE, y * SIZE, SIZE, SIZE); 107 } 108 graphi.setColor(Color.ORANGE); 109 for (int i = 0; i < MASS; i++) { 110 graphi.drawLine(0, SIZE * i, WI, i * SIZE); 111 graphi.drawLine(i * SIZE, 0, i * SIZE, HI); 112 } 113 } 114 115 } 116 } 117 118 @Override 119 public void mouseClicked(MouseEvent e) { 120 // TODO 自動生成されたメソッド・スタブ 121 122 } 123 124 @Override 125 public void mousePressed(MouseEvent e) { 126 // TODO 自動生成されたメソッド・スタブ 127 int x = e.getX(); 128 int y = e.getY(); 129 130 x /= SIZE; 131 y /= SIZE; 132 133 if (boardarray[x][y] == 0) { 134 boardarray[x][y] = 1; 135 } else if (boardarray[x][y] == 1) { 136 boardarray[x][y] = 0; 137 } 138 repaint(); 139 System.out.println(x + "," + y); 140 } 141 142 @Override 143 public void mouseReleased(MouseEvent e) { 144 // TODO 自動生成されたメソッド・スタブ 145 146 } 147 148 @Override 149 public void mouseEntered(MouseEvent e) { 150 // TODO 自動生成されたメソッド・スタブ 151 152 } 153 154 @Override 155 public void mouseExited(MouseEvent e) { 156 // TODO 自動生成されたメソッド・スタブ 157 158 } 159 160 } 161} 162

上記のコードでboard arrayの配列の値を全てCSVファイルで出力したいのですが、多重配列の要素の取得ができずに困っています。boardarray.lengthだと一時配列分しか取れないのでスマートな方法があればと思い投稿しました。
いつも、レベルが低くて申し訳ありませんが、よろしくお願いします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

普通にforの二重掛けでいいのでは?

java

1for(int i = 0; i < boardarray.length; i++){ 2 for(int j = 0; j < boardarray[i].length; j++){ 3 boardarray[i][j]を使う 4 } 5}

あるいはArrays.toStringを使って配列をまるごと文字列化して(両端に[]が入るのでそれを取り除く必要あり)しまうという方法も考えられるかと。

java

1for(int[] arr : boardarray){ 2 String line = Arrays.toString(arr); 3}

投稿2016/04/06 14:35

swordone

総合スコア20651

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

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

sobue

2016/04/07 00:07 編集

いつも、ありがとうございます。助かります。
guest

0

カンマ区切りの文字列の作成に String#join をつかってみました。
マス目の状態をどんな文字で表すかの変更もしやすくしています。

java

1import java.io.BufferedWriter; 2import java.io.FileWriter; 3import java.io.IOException; 4 5public class Clas01 { 6 final static int MASS = 8; // ボードのサイズ 7 final static String OUT_CSV_FILENAME = "board.csv"; // CSV 出力ファイル名 8 final static String CELL[] = { "_", "x", "o" }; // CSV 出力時の石の文字: 空き, 黒, 白 9 10 public static void main(String[] args) { 11 // 0: 空き、1: 黒, 0: 白 12 int[][] boardarray = { 13 { 0, 0, 0, 0, 0, 0, 0, 0 }, 14 { 0, 0, 0, 0, 0, 0, 0, 0 }, 15 { 0, 0, 0, 0, 0, 0, 0, 0 }, 16 { 0, 0, 0, 1, 2, 0, 0, 0 }, 17 { 0, 0, 0, 2, 1, 0, 0, 0 }, 18 { 0, 0, 0, 0, 0, 0, 0, 0 }, 19 { 0, 0, 0, 0, 0, 0, 0, 0 }, 20 { 0, 0, 0, 0, 0, 0, 0, 0 } 21 }; 22 23 try { 24 writeCSV(boardarray); 25 } catch (IOException e) { 26 e.printStackTrace(); 27 } 28 } 29 30 private static void writeCSV(int[][] board) throws IOException { 31 BufferedWriter out = null; 32 try { 33 out = new BufferedWriter(new FileWriter(OUT_CSV_FILENAME)); 34 for (int[] row : board) { 35 String[] row_str = new String[row.length]; 36 int len = row.length; 37 for (int i = 0; i < len; i++) { 38 row_str[i] = "" + CELL[row[i]]; 39 } 40 out.write(String.join(",", row_str)); 41 out.newLine(); 42 } 43 } finally { 44 if (out != null) { 45 out.close(); 46 } 47 } 48 } 49}

出力結果例

$ cat board.csv _,_,_,_,_,_,_,_ _,_,_,_,_,_,_,_ _,_,_,_,_,_,_,_ _,_,_,x,o,_,_,_ _,_,_,o,x,_,_,_ _,_,_,_,_,_,_,_ _,_,_,_,_,_,_,_ _,_,_,_,_,_,_,_

投稿2016/04/07 01:28

katoy

総合スコア22324

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

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

sobue

2016/04/07 12:15

別の例まで出していただき参考になります。ありがとうございます。
guest

0

Java

1 void Write(){ 2 JFileChooser fileChooser = new JFileChooser(); 3 //SaveDialogを表示させる 4 int se = fileChooser.showSaveDialog(this); 5 PrintWriter pw=null; 6 FileWriter fw=null; 7 if (se == JFileChooser.APPROVE_OPTION){ 8 try { 9 fw = new FileWriter(fileChooser.getSelectedFile()); 10 } catch (IOException e1) { 11 // TODO 自動生成された catch ブロック 12 e1.printStackTrace(); 13 } 14 pw = new PrintWriter(fw); 15 } 16 for(int i1=0;i1<=5;i1++){ 17 for(int i11=0;i11<5;i11++){ 18 String s=String.valueOf(board.boardarray[i1][i11]+","); 19 pw.write(s); 20 if(i11==4){ 21 String s2=String.valueOf(board.boardarray[i1][5]); 22 pw.print(s2+"\n"); 23 } 24 } 25 } 26 pw.close(); 27 }

2重forを回しながら書き込むスタイルです
(いろいろめんどくさかったんでこの場にしか対応していません
なので別の場面で使うときはいじってね(object思考とは一体・・・))
swordoneさんの発展形ですが・・・

投稿2016/04/06 15:51

tignear

総合スコア260

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

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

sobue

2016/04/07 12:14

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問