相关疑难解决方法(0)

Java JUnit:方法X对于类型Y是不明确的

我有一些测试工作正常.然后,我将它移动到另一个包,现在我遇到了错误.这是代码:

import static org.junit.Assert.*;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import org.jgrapht.Graphs;
import org.jgrapht.WeightedGraph;
import org.jgrapht.graph.DefaultWeightedEdge;
import org.jgrapht.graph.SimpleWeightedGraph;
import org.junit.*; 

@Test
    public void testEccentricity() {
        WeightedGraph<String, DefaultWeightedEdge> g = generateSimpleCaseGraph();
        Map<String, Double> eccen = JGraphtUtilities.eccentricities(g);

        assertEquals(70, eccen.get("alpha"));
        assertEquals(80, eccen.get("l"));
        assertEquals(130, eccen.get("l-0"));
        assertEquals(100, eccen.get("l-1"));
        assertEquals(90, eccen.get("r"));
        assertEquals(120, eccen.get("r-0"));
        assertEquals(130, eccen.get("r-1"));
    }
Run Code Online (Sandbox Code Playgroud)

错误消息是这样的:

方法assertEquals(Object,Object)对于JGraphtUtilitiesTest类型是不明确的

我怎样才能解决这个问题?为什么在将类移到另一个包时会出现此问题?

java testing junit compiler-errors package

90
推荐指数
1
解决办法
8万
查看次数

如何解决Java Rounding Double问题

似乎减法正在触发某种问题,结果值是错误的.

double tempCommission = targetPremium.doubleValue()*rate.doubleValue()/100d;
Run Code Online (Sandbox Code Playgroud)

78.75 = 787.5*10.0/100d

double netToCompany = targetPremium.doubleValue() - tempCommission;
Run Code Online (Sandbox Code Playgroud)

708.75 = 787.5 - 78.75

double dCommission = request.getPremium().doubleValue() - netToCompany;
Run Code Online (Sandbox Code Playgroud)

877.8499999999999 = 1586.6 - 708.75

由此产生的预期值为877.85.

应该怎样做才能确保正确计算?

java math rounding

75
推荐指数
5
解决办法
16万
查看次数

为什么Java的Double.compare(double,double)实现方式如何呢?

我正在研究Java标准库(6)中compare(double,double)的实现.它写道:

public static int compare(double d1, double d2) {
    if (d1 < d2)
        return -1;       // Neither val is NaN, thisVal is smaller
    if (d1 > d2)
        return 1;        // Neither val is NaN, thisVal is larger

    long thisBits = Double.doubleToLongBits(d1);
    long anotherBits = Double.doubleToLongBits(d2);

    return (thisBits == anotherBits ?  0 : // Values are equal
            (thisBits < anotherBits ? -1 : // (-0.0, 0.0) or (!NaN, NaN)
             1));                          // (0.0, -0.0) or (NaN, !NaN)
}
Run Code Online (Sandbox Code Playgroud)

这个实现的优点是什么?


编辑:"优点"是一个(非常)糟糕的选择.我想知道它是如何工作的.

java floating-point comparison

35
推荐指数
2
解决办法
5万
查看次数

执行双值相等比较时,epsilon值应该是多少

这是以下程序的输出.

value is : 2.7755575615628914E-17
Double.compare with zero : 1
isEqual with zero : true
Run Code Online (Sandbox Code Playgroud)

我的问题是,什么应该是epsilon值?是否有任何有力的方法来获得价值,而不是从天空中挑选一个数字.


package sandbox;

/**
 *
 * @author yccheok
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        double zero = 1.0/5.0 + 1.0/5.0 - 1.0/10.0 - 1.0/10.0 - 1.0/10.0 - 1.0/10.0;
        System.out.println("value is : " + zero);
        System.out.println("Double.compare with zero : " + Double.compare(zero, 0.0));
        System.out.println("isEqual with zero : " + isEqual(zero, 0.0));
    } …
Run Code Online (Sandbox Code Playgroud)

java

21
推荐指数
4
解决办法
2万
查看次数

中点舍入远离零.net C#Decimal到Java Double

我正在将.NET代码转换为Java并遇到精度不匹配的问题.

.NET代码:

private decimal roundToPrecision(decimal number, decimal roundPrecision)
{
    if (roundPrecision == 0)
        return number;
    decimal numberDecimalMultiplier = Math.Round(number / roundPrecision, MidpointRounding.AwayFromZero);
    return numberDecimalMultiplier * roundPrecision;
}
Run Code Online (Sandbox Code Playgroud)

roundToPrecision(8.7250, 0.05);上面代码中的调用函数给出了我8.75期望的函数.

将函数转换/转换为Java如下.我找不到确切的 Math.Round选择.

Java代码:

public double roundToPrecision(double number, double roundPrecision) {
    if (roundPrecision == 0)
        return number;
    int len = Double.toString(roundPrecision).split("\\.")[1].length();
    double divisor = 0d;
    switch (len) {
        case 1:
            divisor = 10d;
            break;
        case 2:
            divisor = 100d;
            break;
        case 3:
            divisor = 1000d;
            break;
        case 4: …
Run Code Online (Sandbox Code Playgroud)

.net c# java precision rounding

11
推荐指数
1
解决办法
1232
查看次数

JUnit 测试:如何在不丢失分支的情况下测试 if 语句?

我已经运行 EclEmma 来覆盖我的 JUnit 测试用例,并且在某些方面达到了 100%。但是,对于覆盖 82% 或 95% 的那些,我的代码旁边有一条消息说“错过了 2 个分支中的 1 个”,我似乎无法解决这个问题。

查看我的课程后,我注意到这条消息只出现在我的 if 语句旁边,这就是让我的测试无法 100% 覆盖的原因。

我想我在问是否有人知道如何在 JUnit 中测试 if 语句,以便不会错过任何一个分支。

这是我要测试的代码:

private double height;
    public void setHeight(double height){
        if(height <=0){
            this.height = 0;
        }
        else{
            this.height = height;
        }
    }//method close
Run Code Online (Sandbox Code Playgroud)

(我正在使用 JUnit 4)

java eclipse junit code-coverage eclemma

0
推荐指数
1
解决办法
8890
查看次数