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

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

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

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

Q&A

解決済

3回答

1384閲覧

java 配列について

v4cacUsuaXnVsQ2

総合スコア13

Java

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

0グッド

0クリップ

投稿2019/06/03 14:15

編集2019/06/04 11:45

###前提・実現したいこと
最近勉強を始めた初心者です
配列の各要素に代入した値を使いたいのですが
どう書けばいいのか分かりません

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

Array.java:3: エラー: ']'がありません num[0] = 10; ^ Array.java:4: エラー: ']'がありません num[1] = 20; ^ Array.java:5: エラー: ']'がありません num[2] = 30;

該当のソースコード

java

1public class Array { 2 static int[] num = new int[3]; 3 num[0] = 10; 4 num[1] = 20; 5 num[2] = 30; 6 7 public static void main(String[] args) { 8 System.out.print(num[1]); 9 } 10} 11

試したこと

java

1//① 2public class Array { 3 static int[] num = new int[3]; 4 5 public static void main(String[] args) { 6 System.out.print(num[1]); 7 } 8}

java

1//② 2public class Array { 3 4 public static void main(String[] args) { 5 int[] num = new int[3]; 6 num[0] = 10; 7 num[1] = 20; 8 num[2] = 30; 9 System.out.print(num[1]); 10 } 11}

java

1//③ 2public class Array { 3 static int[] num = new int[3]; 4 5 public static void main(String[] args) { 6 7 num[0] = 10; 8 num[1] = 20; 9 num[2] = 30; 10 System.out.print(num[1]); 11 } 12}

この書き方ならエラーは出ないので
各要素への値の代入はメソッド内じゃなきゃ出来ないのでしょうか?
その場合①もエラーになりそうなイメージがありますがエラーにはならず
0が出力されます
この0はint型のデフォルト値が出力されてるからですか?
①がエラーにならない理由も知りたいです

調べましたが同じような例がなかったので質問させていただきます

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

y_waiwai

2019/06/03 14:19

このままではコードが見づらいので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
takasima20

2019/06/03 14:26

納得できないかもしれませんが、そういうもんだとしか…
v4cacUsuaXnVsQ2

2019/06/04 11:45

すいませんでした。 修正いたしました。
guest

回答3

0

ベストアンサー

クラス直下の階層では、代入文(厳密には代入式に依る式文)を書くことができません。
ただし宣言の際に初期化することは可能です。

つまり次は違法ですが、

Java

1class Hoge { 2 int n; 3 n = 42; 4}

次は合法です。

Java

1class Hoge { 2 int n = 42; 3}

各要素への値の代入はメソッド内じゃなきゃ出来ないのでしょうか?

工夫次第でできます。

配列の初期化構文を使うパターン

Java

1public class Array { 2 static int[] num = {10, 20, 30};

イニシャライザを使うパターン

Java

1public class Array { 2 static int[] num = new int[3]; 3 static { 4 num[0] = 10; 5 num[1] = 20; 6 num[2] = 30; 7 }

以前、似たような質問に回答したことがあります。
併せてご参照ください。teratail - Javaでのフィールド変数の宣言と初期化について

投稿2019/06/03 14:26

編集2019/06/03 14:32
LouiS0616

総合スコア35660

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

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

v4cacUsuaXnVsQ2

2019/06/04 11:52

回答ありがとうございます。 工夫次第では出来るものなのですね。 過去記事も教えていただきありがとうございます。
guest

0

static int[] num = new int[3]; // << 1

num[0] = 10; // <<2

1は、クラス変数の初期化として許されますが、
2以降は、命令実行なので何らかのメソッド内で記述する(実行させる)必要があります

投稿2019/06/03 14:23

y_waiwai

総合スコア87749

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

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

v4cacUsuaXnVsQ2

2019/06/04 11:46

迅速な回答ありがとうございます。
guest

0

①は想定通りです。
②が基本の使い方です。
③はstaticなので使い方が基本とは違います。
static変数参考hp

投稿2019/06/03 14:27

編集2019/06/03 14:38
sobue

総合スコア329

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

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

LouiS0616

2019/06/03 14:44

すみません、おっしゃる意味がよく分かりません。 ① 『想定通り』とは?誰のどんな想定通りなのですか。 ② 『基本の使い方』とは?二番のnumはローカル変数なので、staticフィールドであるnumの値の決定とは同列に語れないのでは。 ③ 『使い方が違う』とは?staticメソッド内でfinalでないstaticフィールドに対する代入をするのは全く変な操作では無いと思うのですが。
sobue

2019/06/03 14:48

そうですね。失礼しました。発言を控えます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問