Exceptions???
7 отговора
379 прегледа
Exceptions???
Как да проверя дали едно число е в определени граници, в моя случай 0 - 12, без да използвам if, swich, case или други validating statements? Т.е. разрешено е да използвам само различни exceptions, и ако числото не е в определените граници трчбва да изведа някакъв текст на екрана и да прекратя изпълнението на програмата. Трябва да използвам try-catch, но не знам коя точно exception да ползвам.
Мерси предварително!
Мерси предварително!
Re: Exceptions???...
Ама че смешен проблем за решаване имаш. Не ми е интересно да те уча как се ползват exceptions, но как да прасна exception без условни оператори е интересен проблем. Ето едно решение:
...
static void testNotLessThan12( double num) throws Exception{
Double.parseDouble( Math.sqrt(12-num) + "0");
Double.parseDouble( Math.sqrt(num) + "0");
}
...
Re: Exceptions???
masivche ot 12 elementa... be mai da ti napisha koda e po lesno:
package eros;
public class EroS {
public static void test12(int testValue) throws Exception{
int[] testArray = new int[12];
testArray[testValue-1] = 0;
}
public static void main(String[] args) throws Exception{
test12(13);
}
}
na zdrave...:)
package eros;
public class EroS {
public static void test12(int testValue) throws Exception{
int[] testArray = new int[12];
testArray[testValue-1] = 0;
}
public static void main(String[] args) throws Exception{
test12(13);
}
}
na zdrave...:)
Re: Exceptions???
Забавна простотия са ти дали, няма спор.
Ей тоя вариант би трябвало да работи за всякакви int в Java, но го тествай все пак щото мен ме измързя
//assume all arguments are corrent and lowBound < highBound
public static boolean isInInterval(int toCheck, int lowBound, int highBound) {
int toCheckIsNegative = toCheck >> 31;
int lowBoundIsNegative = lowBound >>> 31;
long toCheckL = 0, lowBoundL = 0, highBoundL = 0;
//make all arguments non-negative for more lazyness
try {
int tmp = 1 / lowBoundIsNegative;
lowBoundL -= lowBound;
toCheckL -= lowBound;
highBoundL -= lowBound;
} catch (ArithmeticException ae) {
//no need to do anything
}
try {
int tmp = 1 / toCheckIsNegative;
lowBoundL -= toCheckL;
toCheckL -= toCheckL;
highBoundL -= toCheckL;
} catch (ArithmeticException ae) {
//no need to do anything
}
//all arguments are non-negative, calculate result
long lowBoundDelta = 0, highBoundDelta = 0;
lowBoundDelta = toCheckL - lowBoundL;
highBoundDelta = highBoundL - toCheckL;
//special cases - toCheck is on the border
try {
long tmp = 1 / lowBoundDelta;
tmp = 1 / highBoundDelta;
} catch (ArithmeticException ae) {
//division by zero here - we have an equal
return true;
}
//check if toCheck is smaller than the low boundary
try {
long tmp = lowBoundDelta >>> 63;
//tmp is 1 if lowBoundDelta < 0 <==> toCheck < lowBound
tmp = 1 / (tmp - 1);
} catch (ArithmeticException ae) {
return false;
}
//check if toCheck is bigger than the high boundary
try {
long tmp = highBoundDelta >>> 63;
//tmp is 1 if highBoundDelta < 0 <==> toCheck > highBound
tmp = 1 / (tmp - 1);
} catch (ArithmeticException ae) {
return false;
}
return true;
}
Ей тоя вариант би трябвало да работи за всякакви int в Java, но го тествай все пак щото мен ме измързя
//assume all arguments are corrent and lowBound < highBound
public static boolean isInInterval(int toCheck, int lowBound, int highBound) {
int toCheckIsNegative = toCheck >> 31;
int lowBoundIsNegative = lowBound >>> 31;
long toCheckL = 0, lowBoundL = 0, highBoundL = 0;
//make all arguments non-negative for more lazyness
try {
int tmp = 1 / lowBoundIsNegative;
lowBoundL -= lowBound;
toCheckL -= lowBound;
highBoundL -= lowBound;
} catch (ArithmeticException ae) {
//no need to do anything
}
try {
int tmp = 1 / toCheckIsNegative;
lowBoundL -= toCheckL;
toCheckL -= toCheckL;
highBoundL -= toCheckL;
} catch (ArithmeticException ae) {
//no need to do anything
}
//all arguments are non-negative, calculate result
long lowBoundDelta = 0, highBoundDelta = 0;
lowBoundDelta = toCheckL - lowBoundL;
highBoundDelta = highBoundL - toCheckL;
//special cases - toCheck is on the border
try {
long tmp = 1 / lowBoundDelta;
tmp = 1 / highBoundDelta;
} catch (ArithmeticException ae) {
//division by zero here - we have an equal
return true;
}
//check if toCheck is smaller than the low boundary
try {
long tmp = lowBoundDelta >>> 63;
//tmp is 1 if lowBoundDelta < 0 <==> toCheck < lowBound
tmp = 1 / (tmp - 1);
} catch (ArithmeticException ae) {
return false;
}
//check if toCheck is bigger than the high boundary
try {
long tmp = highBoundDelta >>> 63;
//tmp is 1 if highBoundDelta < 0 <==> toCheck > highBound
tmp = 1 / (tmp - 1);
} catch (ArithmeticException ae) {
return false;
}
return true;
}
Re: Exceptions???
Хахаха
Ще умра просто...
Не е истина един безсмислен въпрос, зададен от човек, който изглежда за втори ден се занимава с програмиране, какви интересни отговори може да получи!
(Не искам да обидя никого, ама наистина ме развеселихте!)
Ще умра просто...
Не е истина един безсмислен въпрос, зададен от човек, който изглежда за втори ден се занимава с програмиране, какви интересни отговори може да получи!
(Не искам да обидя никого, ама наистина ме развеселихте!)
Re: Exceptions???
Лошо няма - задачката е тъпичка, но забавна ;) . Всъщност при така зададеното условие е достатъчно и само едно
return (toCheck < lowBound || toCheck > highBound) - не се ползват if/else, switch/case и т.н., но си беше интересно да се пробва без оператори за сравнение.
return (toCheck < lowBound || toCheck > highBound) - не се ползват if/else, switch/case и т.н., но си беше интересно да се пробва без оператори за сравнение.
Re: Exceptions???
Не мога да се въздържа да не пусна още едно решение. Термит добре е започнал, но няма Exception!
Ето и решение с exception:
Ето и решение с exception:
class Text1{
public static boolean isInInterval(int toCheck, int lowBound, int highBound) {
return (toCheck >= lowBound && toCheck <= highBound) ||
(new Object(){
boolean _(){
throw new RuntimeException("I except!");}})
._();
}
public static void main( String[] args){
isInInterval( 5 , 0 , 12);
isInInterval( -5 , 0 , 12);
}
}