Integer to Roman "несовместимые типы: int нельзя преобразовать в логическое значение [в MainClass.java]" - PullRequest
1 голос
/ 11 февраля 2020

Я хочу преобразовать целые числа в римские цифры, но получаю ошибку incompatible types: int cannot be converted to boolean [in MainClass.java]. Это относится к заявлению, но я не вижу, что не так.

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();
}

Ответы [ 3 ]

1 голос
/ 11 февраля 2020

Ваш алгоритм был довольно близок, во-первых, для нуля нет римской цифры; так что проверьте, что num (или value) хотя бы один. Во-вторых, я переименовал num в value, потому что nums затрудняет дифференциацию. Далее для циклов требуется условие завершения boolean. Здесь вы хотите завершить внешний l oop, когда i меньше нуля, и внутренний l oop, когда 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));
    }
}

И здесь, похоже, он работает правильно.

0 голосов
/ 11 февраля 2020
1.The first statement declares an int variable named i and assigns it the value 20. This statement is only executed once, when the for loop starts.
2.The second statement compares the value and The second statement in a for loop is a condition statement and needs to be a boolean. This statement is executed before each repetition of the for loop.
3.The third statement increments the value of i/j. This statement is also executed once per iteration of the for loop, after the body of the for loop is executed.

These statements each have a different role in the execution of the for loop. 
These roles are:

1.Loop initializer
2.Loop condition
3.Post iteration operation
0 голосов
/ 11 февраля 2020

В for loop первый сегмент - это инициализация, второй - условие, а третий - приращение или уменьшение переменной.
В вашей секунде для l oop вы не упомянули условие, которое должно результат boolean значение true / false. Но вы упомянули res типа int.
Пожалуйста, исправьте код, и он будет работать. Go здесь для большей ясности.

...