如何让罗马数字计算器与负数一起工作

时间:2014-12-23 02:13:18

标签: java calculator roman-numerals

当计算器的结果为负时,罗马数字计算器不起作用,  老实说,我不知道如何解决它。 当计算器给出正值时,一切正常 例如,结果将如下所示

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;
}

2 个答案:

答案 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
}