首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复它,NumberFormatException:用于输入字符串:"[D@548b7f67“

如何修复它,NumberFormatException:用于输入字符串:"[D@548b7f67“
EN

Stack Overflow用户
提问于 2020-05-05 15:28:26
回答 2查看 283关注 0票数 0

这个问题已经有了答案:

java.lang.NumberFormatException: For input string: “0.000” [duplicate]

因此,当运行下面的块代码时,我会得到这个错误:

错误消息:

代码语言:javascript
复制
  java.lang.NumberFormatException: For input string: "[D@548b7f67"
        at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
        at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
        at java.lang.Double.parseDouble(Unknown Source)
        at org.cloudbus.cloudsim.power.PowerVmAllocationPolicyMigrationLocalRegression.isHostOverUtilized(PowerVmAllocationPolicyMigrationLocalRegression.java:169)
        at org.cloudbus.cloudsim.power.PowerVmAllocationPolicyMigrationAbstract.getOverUtilizedHosts(PowerVmAllocationPolicyMigrationAbstract.java:397)
        at org.cloudbus.cloudsim.power.PowerVmAllocationPolicyMigrationAbstract.optimizeAllocation(PowerVmAllocationPolicyMigrationAbstract.java:96)
        at org.cloudbus.cloudsim.power.PowerDatacenter.updateCloudletProcessing(PowerDatacenter.java:102)


**My Code:**

    @Override
    protected boolean isHostOverUtilized(PowerHost host) {

        PowerHostUtilizationHistory _host = (PowerHostUtilizationHistory) host;

        double[] utilizationHistory = _host.getUtilizationHistory();
        double[] ramUtilizationHistory = _host.getRamUtilizationHistory();
        double[] bwUtilizationHistory = _host.getBWUtilizationHistory();

        final List<double[]> utiLizationList = Arrays.asList(utilizationHistory, 
        ramUtilizationHistory, bwUtilizationHistory);
        double x[][] = new double[utilizationHistory.length][3];

        for(int i = 0; i< utilizationHistory.length;i++)
        {   
            for(int j=0; j<utiLizationList.size(); j++){
                x[i][j] = utiLizationList.get(j)[i];
                //System.out.print(" "+ x[i][j] +"");
            }
            //System.out.println();
        }


        double[] y = new double[utilizationHistory.length];

        for(int i=0; i<utilizationHistory.length; i++)
        {
            y[i] =  
           (double) utilizationHistory[i]/1-(double) 
                    utilizationHistory[i] *
                    (double) ramUtilizationHistory[i]/1-(double) ramUtilizationHistory[i] *
                    (double) bwUtilizationHistory[i]/1-(double) bwUtilizationHistory[i] ;
        }

        for(int i=0; i<utilizationHistory.length; i++)
        {
            //Log.printLine("   "+ y[i]);
        }

        int length = 10; // we use 10 to make the regression responsive enough to latest values
        if (utilizationHistory.length < length) {
            return getFallbackVmAllocationPolicy().isHostOverUtilized(host);
        }

        double[] utilizationHistoryReversed = new double[length];
        for (int i = 0; i < length; i++) {
            utilizationHistoryReversed[i] = utilizationHistory[length - i - 1];
        }

        OLSMultipleLinearRegression regression = null;
        try {
            regression = getParameterEstimates(x, y);
        } catch (IllegalArgumentException e) {
            return getFallbackVmAllocationPolicy().isHostOverUtilized(host);
        }

        double[] estimates = regression.estimateRegressionParameters();

        for(int i=0; i<estimates.length; i++)
        {
            Log.printLine("estimates ______  "+ estimates[i]);
        }


//      System.exit(0);

//      double migrationIntervals = Math.ceil(getMaximumVmMigrationTime(_host) / getSchedulingInterval());
        //double predictedUtilization = estimates[0] + estimates[1] * (length + migrationIntervals);

        double predictedUtilization = 0;

        for(int i=0; i<utilizationHistory.length; i++)
        {
             predictedUtilization = estimates[0] +
                    (estimates[1] * utilizationHistory[i]) +
                    (estimates[2] * ramUtilizationHistory[i])+
                    (estimates[3] * bwUtilizationHistory[i]);
        }   

        Log.printLine("___________predictedUtilization: " + predictedUtilization);

        predictedUtilization *= getSafetyParameter();

        addHistoryEntry(host, predictedUtilization);

        return predictedUtilization >= 1;
    }

我应该如何修复NumberFormatException,当我运行上面的代码时,我得到了NumberFormatException错误。提前谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2020-05-05 15:39:52

代码语言:javascript
复制
java.lang.NumberFormatException: For input string: "[D@548b7f67"
    at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
    at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
    at java.lang.Double.parseDouble(Unknown Source)
    at org.cloudbus.cloudsim.power.PowerVmAllocationPolicyMigrationLocalRegression.isHostOverUtilized(PowerVmAllocationPolicyMigrationLocalRegression.java:169)

这告诉我们,方法isHostOverUtilized试图将字符串[D@548b7f67传递给Double.parseDouble[D@548b7f67根本不是一个有效的双值,因此它抛出一个异常。

似乎已经发生的事情是,isHostOverUtilized (或一些相关的方法)采用了一个double[]实例,在其上称为.toString() (这将导致字符串[D@<some garbage value here>),并将其作为-原样传递给Double.parseDouble

票数 0
EN

Stack Overflow用户

发布于 2020-05-05 15:58:17

由于某种原因,在双倍数组的toString()结果中传递的结果不是有效的数字。这种情况可能发生在字符串连接中。

您可能希望得到length的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61616820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档