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

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

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

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

Q&A

解決済

2回答

5545閲覧

3次元配列の問題、エラーの直し方

ka2

総合スコア16

Java

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

0グッド

0クリップ

投稿2018/05/10 11:42

java

1public class Mondai { 2 3 public static void main(String[] args) { 4 float[][][] f = new float[6][5][4]; 5 for(int x = 0; x < f.length; x++); 6 for(int y = 0; y < f.length; y++); 7 for(int z = 0; z < f.length; z++); 8 9 [x][y][z] = x*x+y*y+z*z; 10 System.out.println([x][y][z]); 11 } 12 13} 14

前提・実現したいこと

float型で6×5×4の多次元配列を宣言し、要素[x][y][z]にxx+yy+z*zの値を代入したいのですがエラーが出てしまっています。
どの点を変更すればよいのかご指導いただけると幸いです。

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

Exception in thread "main" java.lang.Error: Unresolved compilation problems: トークン ";" に構文エラーがあります。このトークンの後には Expression を指定する必要があります トークン "(" に構文エラーがあります。このトークンの後には Expression を指定する必要があります at Mondai.main(Mondai.java:8)

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

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

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

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

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

guest

回答2

0

こんにちは、3重for文のところですが、x < f.lengthは正しいです。
ですが、y,zのところはそれぞれ y < f[0].length z < f[0][0].lengthにすべきです。
(全てf.lengthにするとエラーが出ます。)

Java

1public class Main { 2 public static void main(String[] args) { 3 4 float [][][]f = new float[6][5][4]; 5 6 for(int x = 0; x < f.length; x++){ 7 for(int y = 0; y < f[0].length; y++){ 8 for(int z = 0; z < f[0][0].length; z++){ 9 f[x][y][z] = x * x + y * y + z * z; 10 System.out.print(f[x][y][z] + " "); 11 } 12 } 13 } 14 } 15}

投稿2018/05/10 12:17

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ka2

2018/05/10 13:57

回答ありがとうございます。 y < f[0].length、z < f[0][0].lengthにそれぞれするのはyはxより小さく、zはxとyよりも値が小さいから?という理解でよいでしょうか?
退会済みユーザー

退会済みユーザー

2018/05/11 01:09 編集

いいえ、そうではありません。 f[0].lengthやf[0][0]というのは最初に設定した配列のサイズを意味します。 説明を簡単にするために2次元の話にします。 int num[][] = {{1, 3, 5}, {2, 4, 6}}; という配列があったとします。 ここでnum.lengthをとるとこれは2になります。なぜなら {1,3,5}{2,4, 6}という括弧{}でくくられた塊が2つあるからです。 一方num[0].lengthをとるとこれは3になります。 なぜならnum[0].lengthというのは{1,3,5}のサイズのことで、データが3つあるからです。 これは配列の次元がいくつになっても言えます。 今回の場合はfのサイズが 6 * 5 * 4なので f.length = 6, f[0].length = 5, f[0][0].length = 4 になります。 詳しくはhttps://www.javadrive.jp/start/array/index9.htmlをご覧ください。
guest

0

ベストアンサー

問題点1

[x][y][z]f[x][y][z] 角カッコの中に書くのはあくまで配列の添え字です。

問題点2

for文の書き方が変です。
次のように波カッコを付けて処理を囲ってやってください。

Java

1for(int x = 0; x < f.length; x++) { 2 // 繰り返す処理 3}

問題点3

範囲外アクセスを踏んでいます。前回の回答を再度ご確認ください。

投稿2018/05/10 11:45

編集2018/05/10 11:48
LouiS0616

総合スコア35660

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

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

ka2

2018/05/10 13:55

回答ありがとうございます。問題点1,2は理解し修正できました。ありがとうございます。 しかし、問題点3が前回の回答していただいたところを振り返ってもよく理解できていないようでした。 今回の場合も、f.lengthは6なのでf[x].lengthというように考えてしまったのですが・・・ また、xは横yは縦、zは高さにそれぞれ伸びている箱というような理解で大丈夫でしょうか。
LouiS0616

2018/05/10 14:03

> 今回の場合も、f.lengthは6なのでf[x].lengthというように考えてしまったのですが・・・ @Stars1024 さんの回答のように書けばいいです。 --- > xは横yは縦、zは高さにそれぞれ伸びている箱というような理解で大丈夫でしょうか。 6×5×4の配列の場合、高さ6, 縦5, 横4のイメージですかね。 あくまで私のイメージですが、多数派なんじゃないかと思います。 一番外側のループは『高さ』に関するループ、一つ内側のループは『縦』に関するループ、一番内側のループは『横』に関するループです。 その点では、ループカウンタの名前は外から順に z, y, x にした方が直感的です。
ka2

2018/05/10 14:57

z, y, x にした方が直感的という文で、配列に関してのイメージがしやすくなりました。ありがとうございます。また、今回三次元配列だったために、y < f[0].length、z < f[0][0].lengthという表記になったのならば、前回のf[x]はf[0]と記述しても成立するのでしょうか。
LouiS0616

2018/05/10 15:03

成立しますよ。 ただし、Javaでは各行の要素数が異なる二次元配列 (ジャグ配列) が作れます。 イメージ {{1}, {1, 2}, {1, 2, 3}} このような場面で不用意に f[0].length を使ってしまうと、思わぬ挙動となってしまいます。 ...まぁ、ジャグ配列なんてしょっちゅう使うものではありませんから、気にしなくていいかもしれませんね。
ka2

2018/05/10 15:11

何度も回答していただき感謝します。ジャグ配列というのは初めて聞きました。なにが必要になるかわからないので、調べてみようと思います。遅い時間まで質問に付き合っていただき本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問