2016-11-05 2 views
-5

Это мой код программы Java. Я перегрузил функцию add для типов данных int и float, но вызов add(2.3, 2.4) вызывает ошибку, вместо того, чтобы звонить add(float, float).Перегруженная функция генерирует ошибку для аргументов float

public class Main { 

    public static void main(String[] args) { 

     // This calls add(int, int) as expected 
     System.out.println(add(2,4)); 

     // This call throws an error 
     System.out.println(add(2.3,3.4)); 

    } 

    public static int add(int a, int b){ 
     return (a + b); 
    } 

    public static float add(float a, float b){ 
     return (a + b); 
    } 

} 
+1

Добро пожаловать в Stack Overflow! Пожалуйста, примите [тур], посмотрите вокруг и прочитайте [помощь], в частности [* Как задать хороший вопрос?] (/ Help/how-to-ask) –

+0

Кроме того, когда вы были задавая свой вопрос, в правой части текстовой области была добавлена ​​большая оранжевая коробка ** «Как форматировать **» с полезной информацией. Была также вся панель инструментов форматирования. И кнопка ** [?] ** дает возможность форматирования. * И * область предварительного просмотра, расположенная между текстовой областью и кнопкой «Опубликовать свой вопрос» (чтобы вам пришлось прокручивать ее, чтобы найти кнопку, чтобы побудить вас взглянуть на нее), показывая, как будет выглядеть ваше сообщение при публикации , Четкость вашего сообщения и демонстрация того, что вы нашли время для этого, улучшают ваши шансы получить хорошие ответы. –

+1

вызов метода change на System.out.println (add (2.3f, 3.4f)); –

ответ

1

Вы правильно определили перегруженные методы!

То, что вы ошибаетесь, - это способ, которым вы называете методы. Вы звоните add(2.3,3.4). 2.3 и 3.4 - все double s. Вот почему они не могут быть напрямую помещены в метод, который принимает поплавки.

«Что? Почему они удваиваются?» вы можете спросить.

По умолчанию все литералы чисел без . или e считаются int s. И все литералы чисел, которые имеют либо или оба: . или e, считаются double.

Чтобы создать плавающий литерал, добавьте f в конец номеров. то есть все эти поплавки:

1f 
1000f 
1.1f 
-9f 
1e99f 

Таким образом, вы должны назвать ваш метод, как этот

add(2.3f,3.4f) 
0

Есть add методы int и float, в то время как буквальное 2.3 имеет тип double. Там два способа исправить это:

  1. Используйте float литералов, т.е. 2.3f и 3.4f (обратите внимание на суффикс f).

  2. add метод для double s.

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