这个问题已经有了答案:
java.lang.NumberFormatException: For input string: “0.000” [duplicate]
因此,当运行下面的块代码时,我会得到这个错误:
错误消息:
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错误。提前谢谢你的帮助。
发布于 2020-05-05 15:39:52
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。
发布于 2020-05-05 15:58:17
由于某种原因,在双倍数组的toString()结果中传递的结果不是有效的数字。这种情况可能发生在字符串连接中。
您可能希望得到length的结果。
https://stackoverflow.com/questions/61616820
复制相似问题