gpt4 book ai didi

Java 初学者 - 不带开关的罗马数字到十进制

转载 作者:行者123 更新时间:2023-12-01 23:23:46 28 4
gpt4 key购买 nike

我正在学习 AP 计算机科学类(class),但我遇到了此代码的问题。我们将创建一个将罗马数字字符串转换为十进制值的方法

到目前为止,我们只了解了 if/else 语句和 while 循环。我在这里看到了一些使用 switch 的答案,但我们的类(class)还没有到达那里。我需要一种不使用 switch 的方法来做到这一点。我只编写了假设罗马数字按非升序排列的代码,但每当使用像“MM”这样的字符串时,该方法都会返回“0”作为值。有人知道为什么会发生这种情况吗?

任何有关减去数字的提示也将不胜感激。

   public int decimalValue ( String roman ){
//given a Roman Numeral
int decimal =0;
int a = 0; // a and b used as to check each letter in String roman
int b = 1;

// Assuming in non-ascending order. Need to make for ascending
while ( (a <= (roman.length() - 1) ) && (b <= roman.length() ) ) {
if ( roman.substring(0,1) == "M") {
decimal = decimal + 1000;
}
else if ( roman.substring(0,1) == "D") {
decimal = decimal + 500;
}
else if ( roman.substring(0,1) == "C") {
decimal = decimal + 100;
}
else if ( roman.substring(0,1) == "L") {
decimal = decimal + 50;
}
else if ( roman.substring(0,1) == "X") {
decimal = decimal + 10;
}
else if (roman.substring(0,1) == "V") {
decimal = decimal + 5;
}
else if (roman.substring(0,1) == "I") {
decimal = decimal + 1;
}
a++;
b++;
}

return decimal;
}

最佳答案

一些事情:

  1. 您不需要两个计数变量 ab。一个就够了
  2. 您想要检查字符串的字符,因此应该使用 roman.charAt(a) 来检查字符串中位置 a 的字符
  3. == 比较的字符(和其他基本类型),必须与 .equals() 比较的字符串
  4. 现在使用 roman.substring(0,1) 您只是检查字符串的第一个字符,因此您想将其更改为 roman.substring(a, a+ 1) 或使用我在 2 中编写的字符。这样您将不断检查一个又一个字符。
  5. 您还应该考虑像 IX 这样的数字,这些数字您还不认识;)

关于Java 初学者 - 不带开关的罗马数字到十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20317697/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com