我需要一个方法,它将接受String数字作为参数,如果它有一个余数,返回双,如果它是十进制,返回int。
我写了这样的代码:
private double convertToNumber(String number) {
double d = Double.parseDouble(number);
if (d % 1.0 == 0) {
return Integer.parseInt(number);
} else {
return d;
}
}
但是,由于这个方法的签名是两倍,它在任何情况下都会返回两倍。
请给我一些提示。
我不确定我是否理解返回双
或和int
的意图,因为我知道单个函数不可能返回不同的数据类型。
我想我从您的示例代码中了解到的是,如果一个字符串(例如,“123.0”与后面有多少个零无关)从您提供的链接传递到CalculatorEngine
,您希望它被视为一个int
,数学运算符使用int
和double
执行计算(因为currentTotal是一个double
)。
现在,在所有的计算完成之后,如果currentTotal以.0结尾,那么您可能希望它也被视为int,并删除该点,否则保留该点。
如果我理解正确,下面是我认为CalculatorEngine
可能的样子:
public static void main(String[] args) {
CalculatorEngine ce = new CalculatorEngine();
ce.equal("1.01");
ce.add("12");
System.out.println(ce.getTotalString());
ce.subtract("0.01");
System.out.println(ce.getTotalString());
ce.multiply("100.00000");
System.out.println(ce.getTotalString());
ce.divide("123");
System.out.println(ce.getTotalString());
}
public static class CalculatorEngine {
private enum Operator {
ADD, SUBTRACT, MULTIPLY, DIVIDE
}
private double currentTotal;
public CalculatorEngine() {
currentTotal = 0;
}
public String getTotalString() {
return currentTotal % 1.0 == 0
? Integer.toString((int)currentTotal)
: String.valueOf(currentTotal);
}
public void equal(String number) {
currentTotal = Double.parseDouble(number);
}
public void add(String number) {
convertToDouble(number, Operator.ADD);
}
public void subtract(String number) {
convertToDouble(number, Operator.SUBTRACT);
}
public void multiply(String number) {
convertToDouble(number, Operator.MULTIPLY);
}
public void divide(String number) {
convertToDouble(number, Operator.DIVIDE);
}
public void changeSign(String number) {
Double d = Double.parseDouble(number);
currentTotal = d * (-1);
}
public void dot(String number) {
// todo
}
private boolean isDouble(String number) {
double d = Double.parseDouble(number);
return d % 1.0 != 0;
}
private void convertToDouble(String number, Operator operator) {
double dblNumber = Double.parseDouble(number);
switch (operator) {
case ADD:
add(dblNumber);
break;
case SUBTRACT:
subtract(dblNumber);
break;
case MULTIPLY:
multiply(dblNumber);
break;
case DIVIDE:
divide(dblNumber);
break;
default:
throw new AssertionError(operator.name());
}
}
private void add(double number) {
currentTotal += number % 1.0 == 0 ? (int)number : number;
}
private void subtract(double number) {
currentTotal -= number % 1.0 == 0 ? (int)number : number;
}
private void multiply(double number) {
currentTotal *= number % 1.0 == 0 ? (int)number : number;
}
private void divide(double number) {
currentTotal /= number % 1.0 == 0 ? (int)number : number;
}
}
结果:
13.01
13
1300
10.56910569105691
为什么不返回一个数字
从你的方法:
private Number convertToNumber(String number) {
double d = Double.parseDouble(number);
if (d % 1.0 == 0) {
return Integer.parseInt(number);
} else {
return d;
}
}
整数和双重代码都是代码的子类。
函数的签名只能是一(1)种类型,可以是int或double,但不能同时是两者。如果数字有小数部分(true)或(false),则可以尝试重新设计函数以返回布尔值。
请记住整数不能包含小数部分,所以像这样的操作
int a = 3 / 2;
将a
设置为1
而不是1.5
问题内容: 我有一类这样的方法: 我如何在另一个类中调用此方法? 问题答案: 1. 如果要从中调用该方法的类位于同一包中,则创建该类的实例并调用该方法。 2. 使用 3. 最好有个赞等等。 例如:
本文向大家介绍ionic3双击返回退出应用的方法,包括了ionic3双击返回退出应用的方法的使用技巧和注意事项,需要的朋友参考一下 ionic3 做双击退出应用的时候按照网上大神的来,从中遇到了一些问题,用this.app.getRootNav().push(MyPage);跳转的页面无法返回,this.app.getActiveNav().pop();这个方法在新的版本中已近被移除了,最后使用另
我被要求写一个student.compareTo方法,如果两个学生的名字和两个学生的姓氏相同,则该方法应返回0。如果学生的名字按字典顺序排序低于传入的名字,则应返回负值。如果学生的名字按字典顺序排序高于传入的名字,则应返回正值。 这是我到目前为止的代码。对于负值和正值,它应该是固定值还是我应该使用compareTo值? 这是另一个代码。我想知道我是否做对了
问题内容: 根据java doc,方法无法返回值。但是,我确实想知道是否有任何解决方法。 其实我有一个方法,它调用: wheren方法是: 我想访问变量是否可行? 问题答案: 使用而不是使用界面。 例: 在此示例中,您还将需要实现WordLengthCallable类,该类实现Callable接口。
我相信这是一个愚蠢的问题,但我已经讨论了很久了。。我试图创建一个java程序,根据用户输入的年数和金额计算复利。但我一直遇到一个错误,void方法无法返回值。因此,我将方法切换为double,因为这是将返回的内容,但它告诉我double方法必须返回double。即使我在循环中返回一个双倍。。。请帮忙
我正在尝试使用equals方法与对象进行比较,但它总是返回false