2013-12-19 1 views
-3

В моем коде мне нужно инициализировать массив с помощью оператора switch, но когда я попробую, он показывает ошибку, например .... «Константы массива могут использоваться только в инициализаторах». .как решить эту проблему ..Как строковый массив объявляет глобальный и инициализируется с другим значением

public class Arrayclass { 
String[] mStrings; 
void setfor() 
{ 
    int i = 0; 
    switch(i) 
    { 
    case 0: mStrings = { 
      "https://dl.dropboxusercontent.com/s/f308a9s5ycuc3mh/1.jpg", 
      "https://dl.dropboxusercontent.com/s/cmc7qe74ckr5z2u/24.jpg", 
      "https://dl.dropboxusercontent.com/s/4h353n2virybjql/25.jpg", 
      "https://dl.dropboxusercontent.com/s/t9gta0rpaze7j4f/26.jpg", 
      "https://dl.dropboxusercontent.com/s/b9sv9nki52e7zvg/27.jpg", 
      "https://dl.dropboxusercontent.com/s/gyg7kvnlnv753lf/37.jpg" }; 
     break; 
    case 1: mStrings = { 
      "https://dl.dropboxusercontent.com/s/f308a9s5ycuc3mh/1.jpg", 
      "https://dl.dropboxusercontent.com/s/cmc7qe74ckr5z2u/24.jpg", 
      "https://dl.dropboxusercontent.com/s/4h353n2virybjql/25.jpg", 
      "https://dl.dropboxusercontent.com/s/t9gta0rpaze7j4f/26.jpg", 
      "https://dl.dropboxusercontent.com/s/b9sv9nki52e7zvg/27.jpg", 
      "https://dl.dropboxusercontent.com/s/gyg7kvnlnv753lf/37.jpg" }; 
     break; 
    } 
} 
+0

Вдали от декларации вы должны использовать 'new String [] {...};'. – rgettman

+0

не можете описать немного больше ... способ применения ... пожалуйста. – bhavdip

ответ

2

Вдали от декларации, вы должны использовать new String[] в массиве инициализаторе:

case 0: mStrings = new String[] { 
     "https://dl.dropboxusercontent.com/s/f308a9s5ycuc3mh/1.jpg", 
     "https://dl.dropboxusercontent.com/s/cmc7qe74ckr5z2u/24.jpg", 
     "https://dl.dropboxusercontent.com/s/4h353n2virybjql/25.jpg", 
     "https://dl.dropboxusercontent.com/s/t9gta0rpaze7j4f/26.jpg", 
     "https://dl.dropboxusercontent.com/s/b9sv9nki52e7zvg/27.jpg", 
     "https://dl.dropboxusercontent.com/s/gyg7kvnlnv753lf/37.jpg" }; 

Согласно JLS, Section 10.6,

Инициализатор массив может быть указанных в декларации (§8.3, §9.3, §14.4), или как часть создания массива expressio n (§15.10), чтобы создать массив и предоставить некоторые начальные значения.

«Выражение создания массива» относится к JLS, Section 15.10, что делает вас предварять инициализатор массива с new Type[].

ArrayCreationExpression:
        новый PrimitiveType DimExprs Dimsopt
        новый ClassOrInterfaceType DimExprs Dimsopt
        новый PrimitiveType Dims ArrayInitializer
        новый ClassOrInterfaceTyp e Dims ArrayInitializer

1

этот синтаксис используется действителен только при использовании при объявлении переменной массива.

Try:

case 0: mStrings = new String[] { 
... 
+0

благодарит ... bro..it работает. – bhavdip

1

Это прекрасный пример того, когда использовать ресурсы String для android.

http://developer.android.com/guide/topics/resources/string-resource.html

Я бы открыть файл strings.xml и определить каждый из этих вариантов в виде массива строк там:

<resources> 
    <string-array name="planets_array"> 
     <item>Mercury</item> 
     <item>Venus</item> 
     <item>Earth</item> 
     <item>Mars</item> 
    </string-array> 
</resources> 

Тогда объявлять строки [] во всем мире, как так:

String[] vals; 

Затем в вашем коммутаторе выполните следующее:

Resources res = getResources(); 
vals = res.getStringArray(R.array.planets_array); 
Смежные вопросы