【问题标题】:Three-dimensional array from strings.xml来自 strings.xml 的三维数组
【发布时间】:2017-03-28 11:59:56
【问题描述】:

我是 Android 编程的初学者,正在寻求建议/建设性的批评。我正在使用下面附加的代码,以便从 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]);
    }
}

【问题讨论】:

  • 如果你使用Java,你需要学习一些面向对象的东西,比如封装......这将帮助你使你的代码更易于阅读。
  • 优化提示:看起来您正在对一些静态数据进行一些计算。相反,您可以存储计算结果,因此您不必再次使用它。您可以为此使用 java 类并将数组存储为常量。
  • @KNeerajLal 三维数组中的数据由所有常量值组成,包含此代码的活动将只从数组中选择一个值,并且只选择一次。
  • @I'mBlueDaBaDee 一旦我决定如何使用所有数据创建数组,我确实计划使用封装。

标签: java android arrays xml


【解决方案1】:

我的建议是不要在这里使用 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
}

【讨论】:

  • 我认为一些额外的信息可能会有用。在此之前的活动中,用户有机会选择一个国家(使用微调器)。此选择使用该国家/地区的州列表更新第二个微调器。一旦用户选择了一个州,第三个微调器就会更新为该州的城市列表。我计划为每个国家/地区制作一个 3-D 数组。根据您的建议,我似乎需要 50 个原始数据文本文件,其中包含对应于每个州/城市(对于美国)的数字数据。对吗?
  • 谢谢!我试过了,我认为这是一个更好的选择。
猜你喜欢
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 2016-10-05
  • 2016-12-05
相关资源
最近更新 更多