首页 > 解决方案 > 整数到罗马“不兼容的类型: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();
}

标签: javaintroman-numerals

解决方案


您的算法非常接近,首先没有罗马数字为零;所以测试num(或value)至少是一个。其次,我重命名为numvalue因为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));
    }
}

它似乎在这里正常工作。


推荐阅读