如何创建一个"for"循环,不仅添加一个值,还添加一个识别符。Android, Eclipse IDE



假设我有一个整数示例数组,但我不知道数组的长度(它被添加到共享首选项中,并且每次运行应用程序时都会增大大小(:

int[] testArray = new int[UNKNOWN LENGTH];

我想用数组中的值创建一些 int 名称。即。

int test1 = testArray[1]; 
int test2 = testArray[2];
int test3 = testArray[3];
....
int test999 = testArray[999]; 

让我们假设这是长度和最终值,尽管在实际应用程序中我们不知道。

因此,要开始,我有:

for (int i = 0; i < items.length; i++) {
int test1 = testArray[i] }

但是,这只会将值 i=0 及以上添加到 testArray[i]。即。

test1 = testArray[1];
test1 = testArray[2];
test1 = testArray[3];

我还可以通过使用循环和 i 将"test1"更改为 test2、test3 等吗?

即。

int testi = testArray[i]. 

当然,由于显而易见的原因,这行代码不起作用,但是有没有办法用数组和循环来做这样的事情?还是我需要求助于数组列表,或者其他东西?

好的,让我们尝试一些简单的解释。

当你编写一个赋值语句时,如:

int a = b;

赋值的左侧是变量:"a"。对于人类,此变量具有名称,但对于计算机,此名称将不保留。它将被转换为机器内存中的某个位置,例如RAM地址435643。

右侧是此赋值的值。它被评估:这意味着它包含的每个变量都将在运行时,当程序运行时被其值替换。

如您所见,变量替换仅发生在赋值的右侧,而不是作业的左侧。

这是解释的第一部分。

第二个与编程中的符号有关。如果你声明一个变量,如:

 int i;

这意味着 I 现在是编译器的已知符号。每当"i"出现在右侧表达式中时,它都会被其值所取代。喜欢在

int j = i;

这意味着变量 j 在执行 is 语句时将具有 'i' 的值。这并不意味着变量 j 是 i 的别名。如果我们写

i = i +1;

然后 i 递增,但 j 将保持不变。

这并不意味着所有包含"i"的内容都将被 i 的值所取代。如果你现在声明一个变量,比如:

int testi;

"睾丸"本身就是一个符号。它不是 2 个符号的组合,例如:"测试"+"i"。

所以,总结一下:在赋值的左侧,你定义了符号。而且它们不是组成。在右侧,您使用符号 :这就是它们将被其值替换的地方。


最终,@cyborg86pl解释的是,您似乎发现变量名testArray[0]不是很方便,并且想将其称为test0。但这真的不是一个好点。如果你想给这个值起一个名字,那你为什么不直接使用 testArray[0],这已经是一个很好的名称来指定这个值了。你不需要一个新的。

数据结构,用于存储一组未知长度的值(

// Create a Vector and populate it with elements
    Vector vector = new Vector();
    vector.add(new Integer(1));
    vector.add(new Integer(2));
    vector.add(new Integer(3));
 // elements() method returns an Enumeration of Vector's elements 

添加到共享首选项

Enumeration vectorElementsEnum = vector.elements();
int counter=0;
     String arrayName = "myArr";
     while(vectorElementsEnum.hasMoreElements())
    {
    editor.putInt(arrayName + "_" + i, vectorElementsEnum.nextElement());
    editor.commit();
    count++;  
    } 
   editor.putInt(arrayName +"_size", counter); 
   editor.commit();

从共享首选项检索

SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0);  
int size = prefs.getInt(arrayName + "_size", 0);  
Integer array[] = new Integer [size];  
for(int i=0;i<size;i++)  
  array[i] = prefs.getInt(arrayName + "_" + i, -1);  
最后不需要像 var1=arr[

1],var2=arr[2] 等东西,因为 var1 将与 arr[1] 相同,那么为什么要复制数据呢?希望上述实现适合您的需求。

我很难理解你想做什么。就像Snicolas说的,你的设计可能非常错误。

无论如何,您可以尝试使用地图

Map<String, Integer> map = new HashMap<String, Integer>();
for (int i = 0; i < testArray.length; i++) {
    map.put("test"+i, testArray[i]);
}

如果你切换到 Scala,它也基于 JVM,并且可以在 Android 上流畅运行,然后,您可以使用宏。假设UNKNOWN_LENGTH是编译时已知的数字(例如,由脚本替换(,

my_macro { val testArray = new Array[Int](UNKNOWN_LENGTH) }

在另一个项目中,定义宏

def my_macro (x: Unit): Unit = macro my_macro_impl 
def my_macro_impl(c: Context)(x: Expr[Unit]): Expr[Unit] = {
  import c.universe._
  val seqs = x match {
    case q"val $array = new Array[Int]($a)" => x::(for(i <- 0 until a.toInt)
       yield q"val test$i = testArray(i)").toList
    case _ => x
  }
  c.Expr[Unit](Block(seqs))
}

如果有人知道宏,他/她可以纠正我的代码,因为我没有使用它们的经验。

相关内容

最新更新