前提・実現したいこと
多次元配列に#と.が格納されています。
その#が格納されているところだけを、奥行を正面としたら#がどういう風に見えるのかという課題です。
説明](fb7da5c206667929f916e5d7fb2f158c.jpeg)
多次元配列[3][3][3] (高さz,奥行x,幅y)
上面から見た#の位置を保存する配列[3][3] (奥行x,幅y)
奥行を正面に見るということで、多次元配列の高さごとに配列の要素を見ていき#があれば
正面用の配列の、同じ位置に#を代入していけばいいと考えました。
しかし、提出したら結果
・違う結果
・ランタイムエラー
になるそうでやり直しになりました。
どんな数値でテストしたのかは教えてもらえず、考え方が間違っているのか、コードが間違っているのか
アドバイスをいただきたいです。
import
1 2 3public class Main { 4 public static void main(String[] args) { 5 Scanner sc = new Scanner(System.in); 6 7 int pointX = sc.nextInt(); //立体の奥行き 8 int pointY = sc.nextInt(); //立体の横幅 9 int pointZ = sc.nextInt(); //立体の高さ 10 final int sum = (pointX * pointY); //2次元配列の全ての要素数 11 sc.nextLine(); //改行捨てる 12 char[][][] data = new char[pointZ][pointX][pointY]; //高さ、奥行、幅 13 char[][] ans = new char[pointX][pointY]; //結果用(奥行、幅) 14 15 //.初期化 16 for (int j = 0; j < pointX; j++){ 17 for (int k = 0; k < pointY; k++){ 18 ans[j][k] = '.'; 19 } 20 } 21 22 //情報を読込 23 24 for (int i = 0; i < pointZ; i++){ 25 for (int j = 0; j < pointX; j++){ 26 String str = sc.nextLine(); 27 for (int k = 0; k < pointY; k++){ 28 data[i][j][k] = str.charAt(k); 29 } 30 } 31 sc.nextLine(); //区切り記号 "--" 捨てる 32 } 33 34 int cnt = 0; //カウントを初期化 35 // System.out.println("cnt= " + cnt + " l= " + (pointX - 1)); 36 37 38 for(int l = (pointX - 1); l >= 0; l--){ 39 for (int i = 0; i < pointZ; i++){ 40 for (int k = 0; k < pointY; k++){ 41 // System.out.print(data[i][j][k]); 42 //#の場合、対応する結果用の配列にも#を代入する 43 if(data[i][l][k] == '#'){ 44 ans[i][k] = '#'; 45 // cnt++; 46 } 47 // System.out.print(i + "" + k + " "); 48 } 49 // System.out.println(); 50 } 51 // System.out.println("-------"); 52 } 53 54 //逆にして結果を表示 55 for (int j = (pointX - 1); j >= 0; j--){ 56 for (int k = 0; k < pointY; k++){ 57 System.out.print(ans[j][k]); 58 } 59 System.out.println(); 60 } 61 } 62} 63コード
回答1件
あなたの回答
tips
プレビュー