Jadi ketika saya melakukan kode blok di dalam "try{}}", dan saya mencoba mengembalikan nilai, yang keluar adalah " tidak ada nilai yang dikembalikan". Ini adalah kode yang saya gunakan yang mewakili masalah saya.
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?
}
}
}
Pada dasarnya, pertanyaan yang saya miliki adalah "Bagaimana Anda mengembalikan nilai saat Anda menggunakan blok coba dan tangkap?
Untuk mengembalikan nilai ketika menggunakan try/catch
, Anda dapat menggunakan variabel sementara, misalnya
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;
}
Atau Anda harus memiliki return di setiap jalur eksekusi (blok try atau blok catch) yang tidak memiliki throw
.
Ini karena Anda berada dalam pernyataan try
. Karena bisa saja terjadi kesalahan, jumlah mungkin tidak diinisialisasi, jadi letakkan pernyataan return Anda di blok finally
, dengan begitu pasti akan dikembalikan.
Pastikan bahwa Anda menginisialisasi sum di luar try/catch/finally
sehingga sum berada dalam scope.
Masalahnya adalah apa yang terjadi ketika Anda mendapatkan NumberFormatexception
dilemparkan? Anda mencetaknya dan tidak mengembalikan apapun.
Catatan: Anda tidak perlu menangkap dan melempar Exception kembali. Biasanya dilakukan untuk membungkusnya atau mencetak stack trace dan mengabaikannya.
catch(RangeException e) {
throw e;
}