Exceptions???

7 отговора 379 прегледа
#1

Exceptions???

Как да проверя дали едно число е в определени граници, в моя случай 0 - 12, без да използвам if, swich, case или други validating statements? Т.е. разрешено е да използвам само различни exceptions, и ако числото не е в определените граници трчбва да изведа някакъв текст на екрана и да прекратя изпълнението на програмата. Трябва да използвам try-catch, но не знам коя точно exception да ползвам.

Мерси предварително!

Отговор
в отговор на EroS #2

Re: Exceptions???...

Ама че смешен проблем за решаване имаш. Не ми е интересно да те уча как се ползват exceptions, но как да прасна exception без условни оператори е интересен проблем. Ето едно решение:


static void testNotLessThan12( double num) throws Exception{
Double.parseDouble( Math.sqrt(12-num) + "0");
Double.parseDouble( Math.sqrt(num) + "0");
}

...

Отговор
в отговор на EroS #3

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...:)

Отговор
в отговор на koko #4

Re: Exceptions???

shvashtash ideiata, nali?

Отговор
в отговор на EroS #5

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;
}

Отговор
в отговор на termit #6

Re: Exceptions???

Хахаха
Ще умра просто...
Не е истина един безсмислен въпрос, зададен от човек, който изглежда за втори ден се занимава с програмиране, какви интересни отговори може да получи!
(Не искам да обидя никого, ама наистина ме развеселихте!)

Отговор
в отговор на Hacko #7

Re: Exceptions???

Лошо няма - задачката е тъпичка, но забавна ;) . Всъщност при така зададеното условие е достатъчно и само едно
return (toCheck < lowBound || toCheck > highBound) - не се ползват if/else, switch/case и т.н., но си беше интересно да се пробва без оператори за сравнение.

Отговор
в отговор на тepмит #8

Re: Exceptions???

Не мога да се въздържа да не пусна още едно решение. Термит добре е започнал, но няма 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);
}
}


Отговор