2016-11-14 84 views
0

我是Android編程的初學者,尋找建議/建設性的批評。我正在使用下面附加的代碼,以便根據strings.xml文件的內容生成一個三維數組。一旦數組生成後,我有額外的代碼(未附加),從數組中選取一定的值並使用它執行一些計算並在文本視圖中顯示結果。我的方法是好還是有更好的方法來實現我的目標?先謝謝你。strings.xml中的三維數組

這裏是strings.xml中的內容物的少量樣品(大約有50串陣列,從4至約150的任何地方的項目,用含有10個整數或十進制值的每個項目):

<string-array name="state1"> 
    <item>686, 33, 22, 93, 76, 38, 45, 52, 2, 0.55</item> 
    <item>600, 34, 25, 92, 76, 36, 43, 50, 2, 0.51</item> 
    <item>774, 33, 28, 91, 74, 28, 35, 42, 2, 0.43</item> 
</string-array> 

<string-array name="state2"> 
    <item>20, 52, 23, 57, 53, -19, -13, -6, 1, 90</item> 
    <item>289, 67, -38, 73, 58, -26, -19, -12, 2, 24</item> 
    <item>2156, 68, -35, 66, 53, -36, -29, -22, 2, 77</item> 
    <item>131, 61, -4, 68, 57, -19, -12, -6, 1, 14</item> 
    <item>138, 61, -7, 70, 58, -19, -12, -5, 1, 11</item> 
    <item>194, 61, -9, 71, 58, -23, -16, -9, 1, 13</item> 
    <item>342, 61, -13, 71, 58, -20, -14, -7, 2, 13</item> 
    <item>112, 55, 20, 69, 59, -13, -6, 0, 1, 8</item> 
</string-array> 

這是我的MainActivity.java:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Resources res = getResources(); 
     int i, j, k; 
     float[][][] weatherData = new float[60][200][10]; 
     for (i = 1; i < 3 ; i++) 
     { 
      int arrayID = res.getIdentifier("state" + i,"array",getPackageName()); 
      String[] stateData = res.getStringArray(arrayID); 
      int m = stateData.length; 
      for (j = 0; j < m ; j++) 
      { 
       String[] dataValues = stateData[j].split(","); 
       int n = dataValues.length; 
       for (k = 0; k < n; k++) 
       { 
        weatherData[i-1][j][k] = Float.parseFloat(dataValues[k]); 
       } 
      } 
     } 
     Log.v("value", ""+weatherData[1][14][9]); 
    } 
} 
+0

,如果你使用的是Java,你需要學習面向對象的東西,比如封裝......這將幫助您使代碼更易於閱讀。 – Lucas

+0

優化技巧:看起來您正在對一些靜態數據進行一些計算。相反,您可以將計算結果存儲起來,以免再次發生。你可以使用java類來存儲這些數組作爲常量。 –

+0

@KNeerajLal三維數組中的數據由所有常量值組成,並且包含此代碼的活動只會從數組中選取一個值並且只是一次。 – KJG

回答

0

我的建議是不要在這裏使用Android字符串數組。它看起來很亂,而且顯然不是爲使用3D數據而設計的。我寧願在你的案例中使用純文本文件。

文件的格式可能是類似的東西x,y,z:value如:

0,0,1:0.5 
0,0,2:2 
1,1,1:12.1 

原始數據,可以被放置在/res/raw/data.txt,並訪問是這樣的:

InputStream inputStream = context.getResources().openRawResource(R.raw.data); 
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 
String line; 

while ((line = reader.readLine()) != null) { 
    // process single line here 
} 
+0

我認爲一點附加信息可能會有用。在此之前的活動中,用戶有機會選擇一個國家(使用微調器)。此選擇會更新第二個微調控制器,並顯示該國家的狀態列表。一旦用戶選擇一個狀態,第三個微調控制器將更新爲該州的城市列表。我計劃爲每個國家制作一個3D陣列。根據你的建議,看起來我需要50個原始數據文本文件,其中包含對應於每個州/城市(美國)的數字數據。那是對的嗎? – KJG

+0

謝謝!我嘗試了這一點,我認爲這是一個更好的選擇。 – KJG