0

要素の配列があり、配列内の要素を変数として使用したいと考えています。

方程式があり、方程式には複数の変数入力が必要であり、配列を初期化し、それを反復処理し、各変数 (または配列の各要素) の入力を要求するため、これを実行したいと考えています。

だから私はこのような配列を持っています:

String variableArray[] = {"a", "b", "c"}

そして今、私はこの配列を反復処理して、ユーザーからの入力を取得しています:

for(int i=0; i<3; i++) {
    System.out.printf("Enter value for %s: ", variableArray[i]);
    int variableArray[i] = keysIn.nextInt();
}

問題は、この行がコンパイルされないことです:

int variableArray[i] = keysIn.nextInt();

要するに、配列 variableArray[] の要素 (つまり、a、b、および c) を変数として使用したいので、変数ごとに同じプロセスを実行する必要はありません。入力する変数が多い場合にどのように行われるか想像できません (すべてを入力したくありません)。

tl;dr複数の変数の値を入力するプロセスを合理化したいです。

4

5 に答える 5

1

アレイを次のように初期化しました。

String variableArray[] = {"a", "b", "c"}

つまり、Stringsの配列。

後でi-番目の要素を参照する場合は、次のように記述します。

variableArray[i]

前に何もなしint-配列内の単一のエントリを初期化することはできません。

于 2012-09-25T23:38:21.997 に答える
1

Javaはそのようには機能しません。"a"は文字列リテラルであり、変数のように使用することはできません。"a"値が である配列要素を持つことから、 というint変数を持つ魔法の方法はありませんa

しかし、あなたが望むものとおそらく同等の、あなたができることがいくつかあります。

String variableArray[] = {"a", "b", "c"}
int valueArray[] = new int[variableArray.length];

for(int i=0; i<3; i++) {
    System.out.printf("Enter value for %s: ", variableArray[i]);
    valueArray[i] = keysIn.nextInt();
}

の値を取得するには"a"、 を実行しますvalueArray[0]

別のより洗練された提案を次に示します。

String variableArray[] = {"a", "b", "c"}
HashMap<String, Integer> variableValues = new HashMap<String, Integer>();

for(int i=0; i<3; i++) {
    System.out.printf("Enter value for %s: ", variableArray[i]);
    variableValues.put(variableArray[i],  keysIn.nextInt());
}

の値を取得するには"a"、 を実行しますvariableValues.get("a")

于 2012-09-25T23:49:04.083 に答える
1

2つのこと。

Stringまず、配列を as およびs の配列として宣言したためvariableArray[i] = keysIn.nextInt()、どのような方法でも機能intせず、配列に格納できませんString

第二に、は既に宣言されている (配列として、その配列の要素である)int variableArray[i] = keysIn.nextInt();ため、正しくありません。variableArrayStringvariableArray[i]String

行はvariableArray[i] = keysIn.next();と表示されますが、これは数値ではなく、ユーザーが入力したテキストを保存します。

それがどのように見えるかは...

String labelArray[] = {"a", "b", "c"}
int variableArray[] = new int[3];
// You could declare this as
// int variableArray[] = {0, 0, 0};
// if you wanted the array to be initialized with some values first.
for(int i=0; i<3; i++) {
    System.out.printf("Enter value for %s: ", labelArray[i]);
    variableArray[i] = keysIn.nextInt();
}

更新しました

int a = variableArray[0];
int b = variableArray[1];
int c = variableArray[2];
于 2012-09-25T23:45:45.643 に答える
0

あなたが実際に探しているのは地図です。これは、ある値から別の値へのマッピングのコレクションです。あなたの場合、それを使用して、変数の名前を表す文字列に整数値(変数の値)を割り当てることができます。

したがって、Map<String, Integer>-のインスタンスを作成します-「文字列から整数へのマップ」を読み取ります。

このテーマの詳細については、このチュートリアルを参照してください。

これで、コードはどのようになりますか?

String[] variableNames = { "a", "b", "c" };
// create the map object
Map<String, Integer> variableValues = new LinkedHashMap<String, Integer>();

// read variable values and put the mappings into the map
for (int i = 0; i < variableNames.length; i++) {
    System.out.printf("Enter value for %s: ", variableNames[i]);
    variableValues.put(variableNames[i], keysIn.nextInt());
}

// print value of each variable
for (int i = 0; i < variableNames.length; i++) {
    String varName = variableNames[i];
    System.out.println(varName + " = " + variableValues.get(varName));
}

出力:

Enter value for a: 5
Enter value for b: 4
Enter value for c: 8

a = 5
b = 4
c = 8
于 2012-09-25T23:56:54.493 に答える
0

注意して使用してください。ただし、他の回答へのコメントを読んだ後、リフレクションを使用して希望する方法に少し近づく可能性があります。

import java.lang.reflect.Field;
import java.util.Scanner;

public class VariableInput {
   public static class Input {
     public int a;
     public int b;
     public int c;
   }

   public static void main(String[] args) throws IllegalArgumentException,
       IllegalAccessException {
      Scanner keysIn = new Scanner(System.in);
      Field[] fields = Input.class.getDeclaredFields();
      Input in = new Input();
      for (int i = 0; i < 3; i++) {
         System.out.printf("Enter value for %s: ", fields[i].getName());
         fields[i].set(in, keysIn.nextInt());
      }
      int d = in.a + in.b + in.c;
      System.out.println("d=" + d);
   }
}
于 2012-10-02T23:51:47.367 に答える