这里是初学者。这段代码将数字转换为罗马数字,如果不是10,则转换为50的倍数,如果不是9,则转换为0。方法是如此的交织在一起。有没有什么你可以建议我避免做的事情(只是一瞥)?谢谢。
public static void main(String[] args) {
System.out.println(fiftyAndAbove(37));
}
public static String nineAndDown(int number) {
String one = "I", five = "V", ten = "X", sum = "";
if(number == 5) {
return five;
} else if(number == 9) {
return one + ten;
}
else if(number > 5) {
for(int i=1; i<=number-5; i++) {
sum += one;
}
return five + sum;
} else {
if(number == 4 ) {
return one + five;
} else
for(int i=1; i <=number; i++) {
sum += one;
}
} return sum;
}
public static String tenAndAbove(int number) {
int remainder = number % 10, numberOftens = number/10;
String ten = "X", sum = "";
if(numberOftens > 0) {
while(numberOftens > 0) {
sum += ten;
numberOftens -= 1;
}
}
return sum + nineAndDown(remainder);
}
public static String fiftyAndAbove(int number) {
int remainder = number % 50, numberOfFifty = number/50;
String fifty = "L", sum = "";
if(numberOfFifty > 0) {
while(numberOfFifty > 0) {
sum += fifty;
numberOfFifty -= 1;
}
}
return sum + tenAndAbove(remainder);
}发布于 2019-10-23 21:38:36
有没有什么你可以建议我避免做的事情(只看一眼)?
我不会把逻辑不必要地复杂化,就像
if(numberOfFifty > 0) {
while(numberOfFifty > 0) {
…
}
}这相当于
while (numberOfFifty > 0)
{
…
}你也可以看看这个实现,看看你喜欢什么:
import java.util.Arrays;
…
public static String fiftyAndAbove(int number)
{
int remainder = number%50, numberOfFifty = number/50;
char [] Ls = new char [numberOfFifty];
Arrays.fill(Ls, 'L');
return new String(Ls) + tenAndAbove(remainder);
}在你的程序中有四个这样的地方,你需要重复一个字符串。如果您希望使用某个Java版本或更高版本,也可以使用Java: String - add character n-times中描述的方法之一;否则,我建议使用函数来实现。
你也可以考虑你是否找到了
String one = "I", five = "V", ten = "X", sum = "";
if(number == 5) {
return five;
} else if(number == 9) {
return one + ten;
}真的比
if (number == 5) return "V";
if (number == 9) return "IX";https://stackoverflow.com/questions/58493356
复制相似问题