Optimization 罗马数字。你能指出我前面的错误吗?
我是初学者。这段代码将数字转换为罗马数字,如果不是10,则是50的倍数,如果不是9,则是0的倍数。方法是如此相互交织。你有什么建议我应该避免做的吗(只是一眼)?多谢各位Optimization 罗马数字。你能指出我前面的错误吗?,optimization,roman-numerals,Optimization,Roman Numerals,我是初学者。这段代码将数字转换为罗马数字,如果不是10,则是50的倍数,如果不是9,则是0的倍数。方法是如此相互交织。你有什么建议我应该避免做的吗(只是一眼)?多谢各位 public static void main(String[] args) { System.out.println(fiftyAndAbove(37)); } public static String nineAndDown(int number) { String one = "I", f
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);
}
publicstaticvoidmain(字符串[]args){
System.out.println(第五个及以上(37个));
}
公共静态字符串nineAndDown(整数){
字符串one=“I”,five=“V”,ten=“X”,sum=”;
如果(数字=5){
返回五个;
}else if(数字=9){
返回1+10;
}
否则,如果(数量>5){
对于(int i=1;i 0){
总和+=十;
十位数-=1;
}
}
返回和+nineAndDown(剩余);
}
公共静态字符串fiftyAndAbove(整数){
整数余数=数字%50,NumberOf50=数字/50;
字符串五十=“L”,总和=”;
如果(数字50>0){
while(数字50>0){
总和+=五十;
数字五十-=1;
}
}
返还金额+租赁金额(剩余);
}
你有什么建议我应该避免做的吗(只是一眼)
我不会不必要地把逻辑复杂化
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版本或更高版本,还可以使用中描述的方法之一;否则我建议使用一个函数来完成
你也可以考虑你是否找到了
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";
您希望使用哪个Java版本?