optimization - 罗马数字。你能在以后指出我的错误吗?
问题描述
初学者在这里。这段代码将数字转换为罗马数字,如果不是 10,如果不是 9,则为 50 的倍数,然后向下转换为 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);
}
解决方案
有什么(一目了然)你可以建议我应该避免做的事情吗?
我不会不必要地使逻辑复杂化
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";
推荐阅读
- redis - 系统设计近乎实时地聚合过去五分钟、最后一小时和最后一天分享次数最多的 N 篇文章?
- django - 如何在 Django 中创建引用两个相关模型的注释
- node.js - node.js/express:将 router.route() 与中间件功能一起使用
- google-sheets - 如何根据通过 Google 表单响应添加的数据中的两个标准将数据拉入单独的选项卡
- r - 重新建立抓取网页 pdf 的列的提示
- django - 'render' 对象没有属性 'GET'
- reactjs - 映射数组以生成 React 组件时,不遵守数组顺序
- go - 在 Golang 中查询 DynamoDB 上的二级索引
- python - 如何将 ICD9 代码识别为虚拟变量?
- c# - convert 如何将文本框转换为整数 c#