【问题标题】:Passing string to float array?将字符串传递给浮点数组?
【发布时间】:2017-03-08 13:09:20
【问题描述】:

您好,我有一串数字,想将它们放入一个浮点数组中,以便我可以访问这些值。

// this bit works fine, data is split into string array.
String fdata[] = data.split(",");
Float array_f[] = new Float(fdata.length);

// this is the bit which throws an error and causes my app to crash.
for (int i = 0; i < fdata.length; i++){
    float y = Float.parseFloat(fdata[i]);
    array_f[i] = y;
}

错误是一个

java nullpointerexception:尝试调用虚方法 空对象上的 java.lang.string java.lang.split(java.lang.string) 参考。

谢谢

除此之外,我认为我需要解释更多,所以我提供了更多代码来展示我想要做什么。

String data; //does this need to define the number of bytes needed then?

start_Acq.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
    channel_a = String.valueOf(channel_Acq.getSelectedItem());
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                connection.start_acquisition(channel_a);
                data = connection.start_acquisition(channel_a);
                connection.stop_acquisition();
            }catch (Exception e ){
                e.printStackTrace();
            }
        }
    });thread.start();

    data_recived.setText(data);
    String fdata[] = data.split(",");
    Float array_f[] = new Float[fdata.length];

    for(int i = 0; i<fdata.length; i++){
        float y = Float.parseFloat(fdata[i]);
        array_f[i] = y;
    }

}
});

【问题讨论】:

  • 数据为空,你需要检查为什么......你只是不能分割一个空字符串:)
  • 在第一行,您的data 为空。
  • @BatuhanCoskun 我不明白它如何为空,值数据已存储值,我可以使用任何值(例如 1)启动数据变量来定义内存位置吗?该字符串有大约 16384 x32 字节的数据。我真的不知道该怎么做哈哈

标签: java android arrays nullpointerexception


【解决方案1】:

您的代码的问题在于初始化,您所要做的就是使用原始浮点数而不是浮点数:

 String data = "123,5468,1,25,36";
    String fdata[] = data.split(",");
    float array_f[] = new float[fdata.length];
    for (int i = 0; i < fdata.length; i++){
        array_f[i] = Float.parseFloat(fdata[i]);
System.out.println(array_f[i]);
}

【讨论】:

  • @llyasse 我想我只是让自己感到困惑,我还在学习。我已经更新了我的问题,但是用我的全局变量数据说,在初始化时,我是否必须在它接收数据时使用分配的空间量来定义它。因为它需要存储 32 x 16384 字节。
  • 不,您不必指定空间量,但您需要确保数据存储在“数据”变量中,因为错误表明您正在尝试为一个空对象!
  • @llyasse 我认为问题在于程序正在快速完成前一个,例如它试图拆分数据变量,同时它仍在从 DAQ 获取数据变量。当添加断点并一次执行一步时,它可以正常工作。任何建议
  • 是的,我认为您应该在 thread.start() 之后添加 thread.join()。 join 调用在返回之前等待线程终止。
  • 是的,它现在可以工作,不会传递空字符串。感谢您的帮助
【解决方案2】:

你的数组初始化错误,应该是这样的

Float array_f[] = new Float[fdata.length];

在长度之后你应该有一个分号而不是','

for (int i=0; i<fdata.length;i++){

编辑 试试这个就行了

String fdata[] = new String[]{"6.5", "8.5"};           //this bit works fine, data is split into string array.
        Float array_f[] = new Float[fdata.length];
        for (int i = 0; i < fdata.length; i++) {          //this is the bit which throws an error and causes my app to crash.
            float y = Float.parseFloat(fdata[i]);
            array_f[i] = y;
        }
        System.out.println(Arrays.asList(array_f));

【讨论】:

    【解决方案3】:

    首先data 为空;修复它并尝试这个

    float y = java.lang.Float.parseFloat(fdata[i]);
    

    【讨论】:

      【解决方案4】:

      使用这个 获取字符串数组到字符串然后转换浮点数

       for(int i=0;stringarray.length>i;i++){float_var = Float.valueOf(string_array.get(i)); float_array.add(float_var);}
      

      然后添加浮点数组

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-08
        • 1970-01-01
        • 2022-11-26
        • 2016-10-25
        • 1970-01-01
        • 2021-08-17
        相关资源
        最近更新 更多