2015-04-21 2 views
0

Следующий код:Как сохранить различные виды функции и аргументы

public static void main(String[] args) { 
int retval=something(3,5); 
System.out.println(retval); 
    } 

public static float something(int first, int second){ 
return first+second; 
} 

... сбой с ошибкой компиляции:

error: possible loss of precision 
int retval=something(3,5); 
         ^
    required: int 
    found: float 
1 error 

Почему всплывают тип влияния функции типы аргументов?

UPD. Не спрашивая, как улучшить дизайн, я спрашиваю, почему я не могу передавать агенты типа, отличного от того, что возвращает функция.

+0

Какова логика сохранения типа аргумента int и возвращаемого типа float? –

+0

Изучение Java, глядя на то, что произойдет. Я не подозреваю, что я что-то пропустил. – kaboom

+0

Это может быть интерпретация '3,5' как единственного числа, три с половиной. Добавьте промежуток между – Jean

ответ

3

Тип возврата не влияет на тип аргументов. Причина вашей ошибки заключается в том, чтобы присвоить возвращаемый тип float переменной int, которая невозможна без явного приведения.

Это, как говорится, мало имеет смысла для метода, который принимает два int и возвращает их сумму, чтобы возвращать float.

Либо изменить тип возвращаемого значения в целое:

public static int something(int first, int second){ 
    return first+second; 
} 

Или изменить типы аргументов плавать:

public static float something(float first, float second) { 
    return first+second; 
} 
+0

Спасибо за фактический ответ, а не «нужно делать». Переписал: 'int retval = (int) что-то (3,5);' и теперь это работает. – kaboom

2

Это потому, что вы возвращаете значение float и пытаетесь присвоить его int. Попробуйте следующее:

public static void main(String[] args) { 
float retval=something(3,5); 
System.out.println(retval); 
    } 

public static float something(int first, int second){ 
return first+second; 
} 

В качестве альтернативы Ставить тип возврата somthing() к int:

public static int something(int first, int second){ 
    return first+second; 
    } 

Однако если вы не хотите, чтобы изменить тип, вы можете привести тип возвращаемого значения INT:

public static void main(String[] args) { 
     int retval=(int)something(3,5); 
     System.out.println(retval); 
      } 

     public static float something(int first, int second){ 
     return first+second; 
     } 
0

убедитесь, что вы типы аргументов и возвращать типы одного типа, если метод некоторых вычислений.

вы должны иметь:

1.

public static int add(int first, int second){ 
    return first+second; 
} 

2.

public static float add(float first, float second) { 
    return first+second; 
} 

, потому что другой тип данных не имеет смысла.

и имейте в виду, что независимо от типа возвращаемого метода переменная, которая будет удерживать результат метода, такая же.

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