Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android替换我的双数组列表中的空值_Android_Arrays_String_List_Double - Fatal编程技术网

Android替换我的双数组列表中的空值

Android替换我的双数组列表中的空值,android,arrays,string,list,double,Android,Arrays,String,List,Double,我正在我的应用程序中使用achartengine。他们添加了一个处理空值的功能,但是为了正确地处理它们,您需要MathHelper.null\u值来代替空值。图形需要一个List Double[](双数组列表)才能正确显示数据。我的代码循环遍历一个游标,填充一个Double列表,将Double列表转换为Double[],然后最后将Double[]添加到我的列表Double[] 我试着在循环中放入if/else语句,如果column_TEMP为null,那么cvalue=MathHelper.nu

我正在我的应用程序中使用achartengine。他们添加了一个处理空值的功能,但是为了正确地处理它们,您需要MathHelper.null\u值来代替空值。图形需要一个List Double[](双数组列表)才能正确显示数据。我的代码循环遍历一个游标,填充一个Double列表,将Double列表转换为Double[],然后最后将Double[]添加到我的列表Double[]

我试着在循环中放入if/else语句,如果column_TEMP为null,那么cvalue=MathHelper.null_VALUE,但它在需要之前就进行了计算,结果是灾难性的(它失败了)。图形没有正确填充,在屏幕的最底部有一条小线,只显示了2个点,而不是10个点。在MathHelper.NULL_值位于列表Double[]中之前,它无法对其进行计算。我正在试图找到一种方法,当它从Double[]变为List Double[]时,可以更改空值。这是我目前使用的代码。它使空值在图形上显示为0。如果有一个空值,使用较大数字的图形可能会非常混乱。你可以从几百一直到零,然后又回到几百。非常感谢您的任何建议

private List<Double[]> values;
private List<Double> cValue;
private Double[] Dvalue;

        while (cursor.moveToNext()) {
            try {
                String cdate=null;
                Double cvalue=null;
                column_date = cursor.getColumnIndex(Provider.DATE);
                column_value = cursor.getColumnIndex(Provider.TEMP);
                cdate = cursor.getString(column_date);
                cvalue = cursor.getDouble(column_value);
                };
                SimpleDateFormat curFormater = new SimpleDateFormat("yyyy/MM/dd");
                Date dateObj = curFormater.parse(cdate);
                if (dateObj.getTime() >= startDate.getTime() && 
                        dateObj.getTime() <= endDate.getTime())  {
                    SimpleDateFormat postFormater = new SimpleDateFormat("yyyy,MM,dd");
                    String dateObj1 = postFormater.format(dateObj);
                    SimpleDateFormat finalFormater = new SimpleDateFormat("yyyy,MM,dd");
                    Date dateObj2 = finalFormater.parse(dateObj1);
                    cDates.add(dateObj2);
                    cValue.add(cvalue);
                }
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }

    dateValues = cDates.toArray(new Date[0]);
    dates.add(dateValues);

    Dvalue = (Double[]) cValue.toArray(new Double[0]);
    values.add(Dvalue);
编辑:

我发现了一个问题。在我的while循环中,我把这个代码

            Double d=MathHelper.NULL_VALUE; 
            String s=Double.toString(d); 
            Log.i(getClass().getSimpleName(), s);
它记录为0.0,但低于我的chartfactory设置(在循环之外),我将 相同的代码,它返回了1.7976931348623157E308,与预期的一样。为什么?
while循环是否会导致它返回0.0?

不清楚添加if语句是什么意思,因为您没有包含代码,而且“结果非常糟糕(失败)”也不是很具体——错误消息可能会有所帮助

无论如何,鉴于提供的信息,以下是我期望的工作:

更改此项:

cValue.add(cvalue);
为此:

cValue.add(cvalue == null ? MathHelper.NULL_VALUE : cvalue);
一些与您的问题没有直接关系的建议:

  • 不要在同一范围内使用名称仅因单个内部字母大小写不同的变量
    FooBar
    FooBar
    是可以的(虽然
    FooBar
    在Java中应该是类名,而不是变量),但是
    FooBar
    FooBar
    太容易混淆

  • 我不知道你为什么把Dvalue和cValue作为字段。看起来它们只是持有临时值,所以本地值更合适

  • 在Java中,标准约定是只有类具有类似
    Dvalue
    的名称。变量应以小写字母开头。(根据您对“变量”的定义,例外情况是常数,这些常数都是带下划线的大写字母
    ,如_THIS

  • 零长度数组在Java中是不可变的,因此在给定类型中拥有多个数组没有任何意义。您可以将它们保存在常量中(即:
    static final
    字段)并重用它们。或者,在本例中,您知道所需数组的长度,因此可以在调用
    toArray
    之前分配适当大小的数组


正常显示为0.0的值是ID10T错误。愚蠢的我用string=代替string.equals。但主要的问题是,它不喜欢将原始列表中的MathHelper.NULL_值作为Double传递。我要做的是将所有内容作为字符串传递到字符串列表,然后将其添加到字符串数组,最后将其传递到字符串数组列表。一旦我拥有了字符串数组列表中的所有内容,我就必须想出新的代码来将字符串数组列表转换为双数组列表,并且工作得非常好


谢谢你的帮助Laurence:)

旁白:将名为
cvalue
cvalue
的变量放在同一个范围内是很容易出错的。我同意通常是这样,但这让我更容易从一个双精度变量变为一个列表。我觉得我的大脑不对劲,哈哈。
cValue
cValues
或者甚至是
cValueList
cValue
cValue
相比,不要说它们有什么不同。那肯定会更好。一旦最后的代码运行起来,我会把它清理干净。谢谢:)首先,谢谢你提供的所有信息。cvalue和cvalue只在这一个区域中使用,所以一旦通过了这个,我就不必担心它们混淆了。不过我明白你的意思。我不知道为什么我用Dvalue而不是Dvalue,那天我可能只是累了,打错了。我回去收拾一下:)。大小数组总是根据用户在数据库中记录临时值的次数而变化。此外,数组列表中可能只有一个数组,但最多可以有4个。我尝试了cValue.add(cValue==null?MathHelper.null\u值:cValue);但它与以前一样,空值只显示为0,而不是空白。
cValue.add(cvalue == null ? MathHelper.NULL_VALUE : cvalue);