Şu anda, kullanıcının girdiği bir sayının faktöriyelini bulmak için özyinelemeyi kullandığı söylenen programlama ödevimi yaptım. Başarıyla yaptım ve işe yaradı, ancak kodu biraz genişletmeye ve tekmeler için bir istisna eklemeye karar verdim.Java özyineleme ve istisnalar
Temel olarak programın kullanıcıya 0'dan büyük veya 0'dan büyük bir sayı girmesini istediğini ve kullanıcının 0'dan küçük bir sayı girmesi durumunda, bir istisnanın atılmasını, yakalanmasını ve işlenmesini istiyorum. Bu kodda biliyorum StringTooLong
olan yanlış özel durum kullanıyorum, ancak kafamın üstünden başka herhangi bir özel durum bilmiyorum. Kodumu çalıştırdığımda, throw lengthException
numaralı telefondan bulamadığım bir hatayı alıyorum.
import java.util.Scanner;
public class Recursion {
public static void main(String args[]) {
long userNum;
System.out.println("Enter a number to check it's factorial");
Scanner scnr = new Scanner(System.in);
userNum = scnr.nextLong();
StringTooLongException lengthException =
new StringTooLongException ("String has too many characters");
System.out.println(fact(userNum));
}
public static long fact(long userNum) {
try {
if(userNum < 0) {
throw lengthException;
} else if(userNum == 1 || userNum == 0) {
return 1;
} else {
return userNum*fact(userNum-1);
}
} catch(Exception e) {
System.out.println("Enter a number that is greater or equal to 0," + e);
}
}
}
[IllegalArgumentException] (https://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html) daha uygun olabilir. Ayrıca, "* kullanıcı, ** 'den daha az ** bir sayı girerse, bir istisna atılmasını istiyorum" demeyi düşünüyorum. * –
"Yeni bir StringTooLongException()" a atmalısınız, inanıyorum, lengthException değil. Veya, lengthException öğesini 'if' deyimine taşıyabilirsiniz. – Tacocat
Özel bir hata, lengthException yönteminin 'fact (long userNum)' kapsamı dışında olmasından kaynaklanır. Şahsen IllegalArgumentException düşünürdüm. – KevinO