当计算器的结果为负时,罗马数字计算器不起作用, 老实说,我不知道如何解决它。 当计算器给出正值时,一切正常 例如,结果将如下所示
please enter the two two integer values that you want to vomplete the operation with
> 33
> 44
please enter the operation you want preformed
> +
Here is the answer 77 negative roman numeral value Here is the answer in roman numerals
LXXVII
代码在这里:
public static void main(String[] args) {
System.out.println("please enter the two two integer values that you want"
+ " to vomplete the operation with ");
Scanner scan = new Scanner(System.in);
int first = scan.nextInt();
int sec = scan.nextInt();
System.out.println(" please enter the operation you want preformed");
String opera = scan.next();
System.out.println(" Here is the answer");
int value = Acalc(opera, first, sec);
String roman = Roman(value);
System.out.println(" Here is the answer in roman numerals ");
System.out.println(roman);
}
public static int Acalc(String opera, int n1, int n2){
int result = 0;
//Write the calulator
if (opera.equals("+")) {result=n1+n2;}
if (opera.equals("-")) {result=n1-n2;}
if (opera.equals("*")) {result=n1*n2;}
if (opera.equals("/")) {result=n1/n2;}
System.out.println(result);
return result;
}
public static String Roman(double input){
String s = "";
if (input <1 || input < 999)
System.out.println("negative roman numeral value ");
while (input >= 100) {
s += "C";
input -= 100;
}
while (input >= 90) {
s += "XC";
input -= 90;
}
while (input >= 50) {
s += "L";
input -= 50;
}
while (input >= 40) {
s += "XL";
input -= 40;
}
while (input >= 10) {
s += "X";
input -= 10;
}
while (input >= 9) {
s += "IX";
input -= 9;
}
while (input >= 5) {
s += "V";
input -= 5;
}
while (input >= 4) {
s += "IV";
input -= 4;
}
while (input >= 1) {
s += "I";
input -= 1;
}
return s;
}
答案 0 :(得分:3)
因此,罗马数字无法代表零或负数,但以下编辑应该让您的程序执行此操作。
你在哪里:
if (input <1 || input < 999)
System.out.println("negative roman numeral value ");
使用:
if (input < 0){
s="-";
input *= -1;
}
else if (input > 999)
return "Output too large";
else if (input == 0)
return "nulla";
Nulla是拉丁语的零,因为罗马数字等价物不存在。
答案 1 :(得分:1)
这不起作用的原因是因为当result
为负时,因为执行input -= #
没有意义,因为这会使结果更负面。它应该是input += #
。但是,这会为您的代码增加相当多的工作/长度。
相反,您是否可以存储result
是正面还是负面?然后,如果它是否定的,您可以将其更改为正数,执行转换为罗马数字,然后在s
前添加负号。
例如:
orig_result = acalc(some parameters)
if (orig_result > 0){
result = result
}
if (orig_result < 0){
result = result * -1
}
//Convert to roman numerals
if (orig_result < 0){
s = "-" + s
}