Java как вы возвращаете значение из try, catch и, наконец?
поэтому, когда я делаю код блоков внутри " try {}", и я пытаюсь вернуть значение, он выходит"нет возвращаемых значений". Это код, который я использую, который представляет мою проблему.
import org.w3c.dom.ranges.RangeException;
public class Pg257E5
{
public static void main(String[]args)
{
try
{
System.out.println(add(args));
}
catch(RangeException e)
{
e.printStackTrace();
}
finally
{
System.out.println("Thanks for using the program kiddo!");
}
}
public static double add(String[] values) // shows a commpile error here that I don't have a return value
{
try
{
int length = values.length;
double arrayValues[] = new double[length];
double sum =0;
for(int i = 0; i<length; i++)
{
arrayValues[i] = Double.parseDouble(values[i]);
sum += arrayValues[i];
}
return sum; // I do have a return value here. Is it because if the an exception occurs the codes in try stops and doesn't get to the return value?
}
catch(NumberFormatException e)
{
e.printStackTrace();
}
catch(RangeException e)
{
throw e;
}
finally
{
System.out.println("Thank you for using the program!");// so would I need to put a return value of type double here?
}
}
}
в основном, вопрос, который у меня есть: "как вы возвращаете значение при использовании блока try и catch?
4 ответов
для возврата значения при использовании try/catch
вы можете использовать временную переменную, например,
public static double add(String[] values) {
double sum = 0.0;
try {
int length = values.length;
double arrayValues[] = new double[length];
for(int i = 0; i < length; i++) {
arrayValues[i] = Double.parseDouble(values[i]);
sum += arrayValues[i];
}
} catch(NumberFormatException e) {
e.printStackTrace();
} catch(RangeException e) {
throw e;
} finally {
System.out.println("Thank you for using the program!");
}
return sum;
}
еще вам нужно иметь возврат в каждом пути выполнения (try block или catch block), который не имеет throw
.
Это потому что вы находитесь в try
заявление. Поскольку может быть ошибкой, sum может не инициализируется, поэтому поместите оператор return в finally
блок, таким образом, он наверняка будет возвращен.
убедитесь, что вы инициализируете sum вне try/catch/finally
Так что это в области.
проблема в том, что происходит, когда вы получаете NumberFormatexception
кинули? Распечатать его и ничего не вернуть.
Примечание: вам не нужно ловить и бросать исключение обратно. Обычно это делается, чтобы обернуть его или распечатать трассировку стека и игнорировать, например.
catch(RangeException e) {
throw e;
}
вот еще один пример, который возвращает логическое значение с помощью try / catch.
private boolean doSomeThing(int index){
try {
if(index%2==0)
return true;
} catch (Exception e) {
System.out.println(e.getMessage());
}finally {
System.out.println("Finally!!! ;) ");
}
return false;
}