java My Basic货币转换器程序输出错误
因此,代码应该转换货币,但它没有正确地进行转换。我有一个变量k(克罗地亚库纳…1欧元=7.5库纳),它是1,例如,如果我想将1欧元转换成1美元,程序将金额(1)乘以7.5,那么我有库纳的欧元金额,这是可行的。但是,当我将结果(7.5)除以6.3(1美元等于6.3库纳)时,我得到了相同的数字
import java.util.Scanner;
public class Conv {
private double rez;
private double rez2;
private double svota;
Scanner ul = new Scanner(System.in);
public void PretvorbaInKunu(double y) {
System.out.print("Insert amomunt: ");
svota = ul.nextDouble();
rez2 = svota*y;
}
public void PR2(double x) {
rez = getRez2() / x;
}
public double getRez() {
return rez;
}
public double getRez2() {
return rez2;
}
public double getSvota() {
return svota;
}
}
import java.util.Scanner;
//Currency Converter
public class Vjezbica {
public static void main(String[] args) {
double e = 7.5;
double d = 6.3;
double p = 9.5;
double k = 1.0;
Conv more = new Conv();
Scanner in = new Scanner(System.in);
System.out.print("\t\tCurrency converter\nIz (e,p,d,k) - ");
String iz = in.next();
switch(iz) {
case "e":
more.PretvorbaInKunu(e);
break;
case "d":
more.PretvorbaInKunu(d);
break;
case "p":
more.PretvorbaInKunu(p);
break;
case "k":
more.PretvorbaInKunu(k);
break;
}
System.out.println(more.getRez2());
System.out.print(" To ");
String u = in.next();
switch(u) {
case "e":
more.PR2(e);
case "d":
more.PR2(d);
case "p":
more.PR2(p);
case "k":
more.PR2(k);
}
System.out.println(more.getSvota() + " " + iz + " is " + more.getRez() + " " + u);
}
}
# 1 楼答案
首先,正如托拜厄斯已经指出的那样,错误在于缺少了“突破” 但代码中还有其他错误,例如扫描仪未关闭
我还建议提高代码质量。您可以编写一个只执行计算的枚举类型(无输入-输入应该分开)。然后,您可以使用不同的枚举构造函数轻松定义货币
上面还讨论了是否应该使用双精度或双精度十进制。BigDecimal是一种“昂贵”的类型。我想知道浮动是否还不够,因为货币值通常包含2位数的精度——如果你没有处理非常高的金额,32位浮动类型应该已经受到影响
我将其改写如下:
未考虑:转换首先从X转换为Kuna,然后从Kuna转换为Y。在这两种转换中,我们都在执行不精确舍入(地板而不是正确舍入,地板两次而不是一次)
根据这个建议,如果你计算出一个精确的转换率,最终可以直接从X转换到Y,然后对最终结果进行一轮运算,那就更好了
# 2 楼答案
问题在于你的第二个switch case语句:你需要在每个case的末尾加上一个break
如果像这样更改Vjezbica类,它应该可以工作: