2015-03-01 7 views
4

У меня есть следующий код:неконвертируемые типы ошибок в Java

import javax.swing.JOptionPane; 

public class Excercise613 { 
    /** 
     * Display the prompt to the user; wait for the user to enter 
     * a whole number; return it. 
     */    

    public static int askInt(String prompt) {  
     String s = JOptionPane.showInputDialog(prompt); 
     Double d = Double.parseDouble(s); 
     return d >= 0 ? (int) d : (int) (d - 1); 
    } // End of method 
} // End of class 

Когда я компилирую это, я получаю сообщение об ошибке в нижней части экрана, который говорит «неконвертируемые типам необходимые:. Int Найдено: Java .lang.Double "И затем он выделяет фрагмент кода (int) d".

Что я здесь делаю неправильно? Почему не работает литье типа?

ответ

2

Используйте функцию doubleValue().

Например:

import javax.swing.JOptionPane; 

public class Excercise613 { 
    // Display the prompt to the user; wait for the user to enter a whole number; 
    // return it. 
    public static int askInt(String prompt) {  
     String s = JOptionPane.showInputDialog(prompt); 
     Double d = Double.parseDouble(s);      
     return d >= 0 ? (int) d.doubleValue() : (int) (d.doubleValue() - 1); 
    } // End of method 
} // End of class 

Или вы можете удалить (int) слепки и просто позвонить d.intValue(). Например: return d >= 0 ? d.intValue() : (d.intValue() - 1);

+0

Это сработало; код теперь компилируется. Но зачем мне это добавлять? Я написал код раньше, когда просто иметь переменную было достаточно, чтобы ее отличить. @DermotBlair –

+0

Двойной с капиталом «D» является примитивом в штучной упаковке и не может быть отнесен к примитивному int, используя '(int)', но примитивный двойной с небольшим «d» можно передать в int. Поэтому, чтобы использовать Double для int, вам нужно получить его двойное значение, используя функцию doubleValue(). –

+0

Если это сработало для вас, и вы довольны моим объяснением, не могли бы вы принять ответ, нажав кнопку. Благодарю. Если у вас есть еще вопросы по этому поводу, просто дайте мне знать. –

Смежные вопросы