超出范围的静态方法

Out of scope static methods

提问人:Bro11 提问时间:10/26/2023 最后编辑:Jon SkeetBro11 更新时间:10/27/2023 访问量:64

问:

因此,在我参加的 CodeHS 课程中,我试图将美分与银行账户余额分开。例如,转弯 12.34 到 34。我正在尝试使用 value.indexOf() 和 value.length() 来计算余额。但是,我不断收到“您可能忘记声明 length() 或超出范围”错误。我很困惑,因为我认为这些是内置于 Java 本身的,但也许不是?我已经浏览了文档,但我仍然迷路了。任何帮助都是值得赞赏的。

这是该方法的代码(我认为这是一个 idk 词汇 lmao 的方法)

public class Currency
{
    private Double value;
    
    // Constructor
    public Currency(Double startValue)
    {
        value = startValue;
    }
    
    // Sets value to newValue
    public void setValue(Double newValue)
    {
        value = newValue;
    }
    
    // Returns the dollar portion of value
    // if value is 12.34, returns 12
    public Integer getDollars()
    {
        return (int)value.doubleValue();
    }
    
    // Returns the cents portion of value
    // as an Integer
    // if value is 12.34, returns 34
    public Integer getCents()
    {
        return value.subSequence(value.indexOf("."), value.length());
    }
    
    // Returns a String representation
    // in the format
    // $12.34
    public String toString()
    {
        return value.doubleValue();
    }
}
Java 方法

评论

2赞 Jon Skeet 10/26/2023
该字段的类型为 。该类型没有 和 方法。似乎您试图将它视为字符串 - 它不是......valueDoubleindexOf()length()
1赞 Jon Skeet 10/26/2023
(而且我不知道你希望调用哪个方法会返回一个 ,...subSequenceInteger
0赞 Bro11 10/26/2023
我刚刚开始学习整数、双精度、字符值类型的课程,我很困惑。如何转换 double 于 String?我正在尝试选角,但它不起作用。
1赞 Idle_Mind 10/27/2023
“我刚刚开始上整数、双精度、字符的课程” 如果你只是在学习 Java,那么使用 String 来提取美分部分可能不是“正确的方法”。*另外,在其他国家/地区寻找 a 是有问题的,这些国家/地区不使用句点作为小数分隔符。您可能应该将货币价值乘以 1,000 以获得便士总数并将其存储在 int 中。然后将原始货币值转换为整数,仅得到美元部分。将其乘以 100 并从总便士数中减去该数字,得到便士数。.
0赞 Idle_Mind 10/27/2023
@user85421是的,我现在脑死亡了。应该是 100 而不是 1,000。你是对的,Java 总是使用 .我正在考虑使用当前语言环境的 C#。我脑子里有太多的语言。.

答:

0赞 Basil Bourque 10/26/2023 #1

正如 Jon Skeet 所评论的那样,您正在将其视为文本。它不是文本。Double

如果需要文本,请创建一个对象。调用 Double#toString。此方法生成文本来表示对象中保存的数字的值。该对象不包含任何文本。StringDoubleDouble

String s = myDouble.toString() ;

对于基元,请使用 Double.toString 方法。doublestatic

double x = 42.7d ;
String s = Double.toString( x ) ;

String提供您寻求的和方法。indexOflength


顺便说一句,在实际工作中,我们从不使用/类型来表示金钱问题。这些浮点类型以牺牲准确性来换取执行速度。doubleDouble

对于金钱问题,当准确性至关重要时,请使用 BigDecimal 类。或者,乘以得到另一个评论中提到的整数。

评论

0赞 Bro11 10/26/2023
哦,我想知道toString做了什么,好吧,我现在明白了,谢谢!
0赞 Bro11 10/27/2023
我宁愿只使用,但课程是试图教我所有的数组数据类型,所以我会忍受它 =pdouble