🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

Q&A

3回答

475閲覧

javaのfor文中に出てくるiの増加分変数を宣言したい

German_p0tat0

総合スコア26

Java

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

0グッド

0クリップ

投稿2020/11/30 17:33

java

1import java.util.*; 2 3public class Main { 4 public static void main(String[] args) throws Exception { 5 // Your code here! 6 for(int i = 0; i<3; i++){ 7 int ai = i; 8 } 9 System.out.print(a0,a1,a2); 10 } 11} 12 13//a0=0,a1=1,a2=2みたいになってほしい。

特にjavaに限ったことではないのですが、上のようなプログラムをコメントに書いてある結果になるようにしたいのだが、エラーが出でてしまいます。
エラーの意味は3回int aiという変数が宣言されているからと理解しているのですけど、
iをつかってこのようにiの増加分変数を宣言する方法はないですか?
たとえばa(i)やa{i}にしたらいけるとか←これは無理だと分かってる。変数名のiをfor文中の配列(例:array[i])みたく数字として判断する方法はないですか?

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

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

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

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

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

swordone

2020/11/30 19:17

配列ではいけない理由は何ですか?
German_p0tat0

2020/12/01 05:04

沢山の値を標準入力で格納するときに配列だと楽だと思ったのですが、そもそもその時はa[i]みたいに変数名使わず添え字をつかったらいいんですよね。自問自答ですみません。夜中で頭バグってました。
xebme

2020/12/08 10:34

Map<String,Integer>を使えば任意の名前をキーにできます。"a0","a1","a2"
guest

回答3

0

まず、

エラーの意味は3回int aiという変数が宣言されているからと理解しているのですけど、

paizaで実行してみました。

text

1Main.java:9: error: cannot find symbol 2 System.out.print(a0,a1,a2); 3 ^ 4 symbol: variable a0 5 location: class Main 6Main.java:9: error: cannot find symbol 7 System.out.print(a0,a1,a2); 8 ^ 9 symbol: variable a1 10 location: class Main 11Main.java:9: error: cannot find symbol 12 System.out.print(a0,a1,a2); 13 ^ 14 symbol: variable a2 15 location: class Main 163 errors

エラーは"cannot find symbol"、つまり「そんな変数名は無い」であって、「3回int aiという変数が宣言されているから」ではありません。
ちゃんと読みましょう。


この手の、「変数名に連番をつけたい」という質問は頻出のもので、
答えは、「配列を使え」です。

ある名前の変数が実行時に存在したりしなかったりすると、
変数の存在に関わるエラーを実行前に検出できなくなりますし、
読みづらいですし、
処理は追いづらくなってデバッグが面倒ですし、
そんなデメリットを受け入れたとしても、配列や辞書より使い勝手が悪いからです。

投稿2020/12/01 01:49

ozwk

総合スコア13551

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

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

0

こんなサンプルはいかがでしょうか。

  • int a[] = new int[n]; で配列を定義しています。
  • 配列の長さは a.length で取得できます。
  • 配列の最初の要素にアクセスするには a[0] と書きます。配列の要素数分2回ループが走ります。
  • このサンプルでは Scanner を使って標準入力からn回整数を読み込んでから表示します。

java

1import java.util.*; 2 3public class Main { 4 public static void main(String[] args) throws Exception { 5 Main m = new Main(); 6 m.run(3); 7 } 8 void run(int n) { 9 int a[] = new int[n]; 10 Scanner scanner = new Scanner(System.in); 11 for(int i=0; i<a.length; i++) { 12 String s = scanner.nextLine(); 13 a[i] = Integer.parseInt(s); 14 } 15 for(int i=0; i<a.length; i++){ 16 int ai = a[i]; 17 System.out.printf("a%d=%d ", i, a[i]); 18 } 19 System.out.println(); 20 } 21}

実行結果

a0=11 a1=22 a2=33

投稿2020/12/08 04:34

JavaCommons

総合スコア86

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

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

0

ループの中で変数宣言したからと言っても、宣言される変数は一つだけです。
また、その変数は、宣言されたブロック{}の中でしか有効ではありません。

そういう場合は、配列かリストを使えばいいです。
#それもループ前で宣言しましょう

投稿2020/11/30 22:16

編集2020/11/30 22:25
y_waiwai

総合スコア88038

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問