2012-03-07 83 views
0

我来自一个动作脚本,我对如何在java中使用数组感到困惑。如何构建数组,推送给它们,并在Java/Android中循环遍历它们

在我的主要活动我创建了一个名为mIcons空数组,像这样

private Array mIcons; 

现在我想通过使用从我DataBaseHelper类的方法,它看起来像这样来设置数组的值:

public Array getHomeScreenIcons() { 

     Array iconList; 

     // Select All Query 
     String selectQuery = "SELECT * FROM " + homeIcons; 

     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery(selectQuery, null); 

     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 

iconList.push(Integer.parseInt(cursor.getString(0)));

  } while (cursor.moveToNext()); 
     } 
     Log.v(TAG, "List Created"); 
     // return contact list 

} 

大胆线跳出的代码是问题至今..我怎么推到我的数组

再后来我将要运行一个for循环从数组我主要活动using.length

+0

了解原始语言结构的最好方法是通过一本书或在线教程。这个问题涉及这样的基本语法,它不属于SO。 – 2012-03-07 20:43:33

回答

7

使用的的ArrayList paramaterized任何类型你想

ArrayList<Integer> iconList = new ArrayList<Integer>();

添加具有

iconList.add(Integer.parseInt(cursor.getString(0)));

迭代与

for (int i: iconList) 
{ 
    // i is your entire array starting at index 0 
} 

for (int i=0; i< iconList.size(), i++) 
{ 

} 
+1

这个答案大部分都是正确的,除了你不能将基元作为集合类型传递。你需要'ArrayList iconList = new ArrayList ()'。 – Devunwired 2012-03-07 20:43:45

+0

谢谢你滑过我的脑海,编辑我的回答 – bbedward 2012-03-07 20:46:07

+0

哇,好吧,首先谢谢你,其次,你能向我解释一下Array和ArrayList之间的区别吗?我正在查找它,显然Array必须有一个预定义的长度?很显然ArrayList是我想要使用的,但是如果有人能向我解释为什么Array的必须有预定义的长度,我会爱上你......对我来说似乎是绝对迟钝的? – erik 2012-03-07 20:51:19

2

你可能通过

0123思考的ArrayList

private ArrayList<String> iconList = ArrayList<String>(); 
iconList.add("Stuff"); 

再后来循环

for (int i=0; i<iconList.size(); i++) { 
    String newStuff = iconList.get(i); 
} 
0

您可以用Java定义数组是这样的:

int[] intArray = new int[3]; // array for three ints 
String[] stringArray = new String[10]; // array for 10 Strings 

因此,对于你的代码,你可以做这样的事情:

if (cursor.moveToFirst()) { 
    int[] iconList = new int[cursor.getCount()]; 
    int index = 0; 
    do { 
     iconList[index] = Integer.parseInt(cursor.getString(0)); 
     index++; 
    } while (cursor.moveToNext()); 
} 

之后,你可以像这样遍历数组:

for (int icon : iconList) { 
    // Do something with icon 
} 
1

你或许应该打了一些基本的Java教程习惯数组语法和功能。 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html可能是一个很好的起点。

看你的具体问题 -

通常你不想使用Array类的,你做的方式。它更像是一个帮手类。另外,看起来你正在使用堆栈语义,而且你可能希望使用堆栈。

首先,数组: 声明数组,像这样:

Type[] myArray = new Type[arraySize]; 

,然后你用索引来访问它像这样:

Type myThingFromArray = myArray[myArrayIndex]; 

,你把东西在里面,像这样:

在Java中
myArray[myTargetIndex] = myObjectOfTypeType; 

原始阵列具有静态大小并且不易可增长。对于大多数应用程序来说,使用Collections框架的成员会更好。如果您正在积极寻找堆栈(如您所说的那样),那么您可以使用Stack<Integer>并且具有所有常规的堆栈操作。

使用现代集合类的另一个好处是您可以使用for-each构造来遍历集合,从而消除了一些常见的样板。一个例子:

public ArrayList<Integer> iconList; 
public Array getHomeScreenIcons() { 

    Array iconList = new ArrayList<Integer>(); 

    // Select All Query 
    String selectQuery = "SELECT * FROM " + homeIcons; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do { 
      iconList.add(Integer.parseInt(cursor.getString(0))); 
     } while (cursor.moveToNext()); 
    } 
    Log.v(TAG, "List Created"); 
    // return contact list 

    //Iterate like so: 
    for (Integer i : iconList){ 
     System.out.println("Here's all integers in the icon-list: " + i); 
    } 
}  
相关问题