java - 整数到罗马“不兼容的类型:int 无法转换为布尔值 [in MainClass.java]”
问题描述
我想将整数转换为罗马数字,但收到错误消息incompatible types: int cannot be converted to boolean [in MainClass.java]
。它指的是 for 语句,但我看不出有什么问题。
public String intToRoman(int num) {
if (num < 0 || num > 3999)
return Integer.toString(-1);
int nums[] = {1,4,5,9,10,40,50,90,100,400,500,900,1000};
String[] syms = {"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"};
StringBuilder sb = new StringBuilder();
int n=0;
for(int i = 12; 0 ; i--) {
int res=0;
if(num > nums[i]) {
res = num / nums[i];
for(int j=1 ; res ; j++) {
sb.append(syms[i]);
}
}
}
return sb.toString();
}
解决方案
您的算法非常接近,首先没有罗马数字为零;所以测试num
(或value
)至少是一个。其次,我重命名为num
,value
因为nums
难以区分。接下来,循环需要boolean
终止条件。在这里,您希望在i
小于零时终止外循环,在j
大于(或等于)时终止内循环value / nums[i]
。最后,由于您没有使用实例状态,所以我制作了方法static
. 喜欢,
public static String intToRoman(int value) {
if (value < 1 || value > 3999) {
return "-1";
}
int nums[] = { 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000 };
String[] syms = { "I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD",
"D", "CM", "M" };
StringBuilder sb = new StringBuilder();
for (int i = nums.length - 1; i >= 0; i--) {
if (value >= nums[i]) {
for (int j = 0; j < (value / nums[i]); j++) {
sb.append(syms[i]);
}
value %= nums[i];
}
}
return sb.toString();
}
我测试过的,比如
public static void main(String[] args) {
for (int i = 1; i < 100; i++) {
System.out.println(intToRoman(i));
}
}
它似乎在这里正常工作。
推荐阅读
- c++ - 在 Xcode C-lang 中链接库
- javascript - 为什么我的应用脚本代码将电子表格复制到谷歌驱动器的根目录以及特定目录?
- docker - Dockerfile:来自守护进程的错误响应:OCI 运行时创建失败:container_linux.go:349
- java - 在方法重载中,方法解析发生在编译时还是运行时?
- python - 在 Ubuntu 20.04 上安装 Python 3.9 时出错 > 已解决
- vue.js - 如何在 node_modules 中更改 Vue 的 src 代码进行测试
- forms - 提交列表表格并重定向到 PayPal
- java - 如何以“;”分隔的各种号码发送消息?
- makefile - Makefile:从版本字符串中获取短版本字符串
- python - Matlab代码的Python实现——有限差分法