Saturday, May 9, 2009

QnA - Pano ba at para saan ang Exceptions?

Ok, ano ba ang exceptions? Let's say ganto:

...
int num1 = 0;
Scanner scan = new Scanner(System.in);

num1 = scan.nextInt();
...

bale, yung num1 magkakaroon ng input na integer galing sa user thru the console. Bale mag wowork po yan ng tama EXCEPT pag string ang ipasok ng user. Yan po ang reason kung bakit exception yung tawag sa mga errors sa java. Eto po yung formal definition ng Sun:

An exception is an event that occurs during the execution of a program that disrupts the normal flow of instructions.


Now, pano magagawan ng paraan ang mga exceptions? Pwede gumamit ng throws or try-catch (or minsan try-catch-finally) na code blocks. Ang idi-discuss ko ngayon ay yung try-catch. Ganito po kung pano gumagana ang try-catch:

try {
statement1
statement2
...
}
catch (ExceptionCode var) {
statementI
statementII
...
}
System.out.println("hello po");

pag may error sa loob ng try block, hindi na nya i-e-execute yung next statement. yung catch statement kagad ang execute nya. Kaya sa example ko sa taas, pag nag error yung statement1, hindi na sya tutuloy kay statement2. Sa statementI na kagad sya. Then syempre statementII ang susunod. Isipin mo sya na pag nagkaproblem mga statements sa loob ni try, si catch ang sasalo sa problema. Si catch ang bahala. Ngayon kung wala naman naging problema si try, hindi na nya tatawagin si catch. lulukdawan na si catch kung walang naging problem si try. kaya sa example natin, kung walang error si try, diretso na sa 'System.out.println("hello po"); ang execution kasi nga lulukdawan na nya si catch dahil wala naman naging error.

Ngayon, kung dalawa yung catch blocks sa codes, ibig sabihin, depende kung anong uri ng error na naencounter ni try ang tatawagin. Kung gagamit ka ng eclipse, di ka mahihirapan masyado dito kasi mag sa-suggest nya sya kagad syo kung ano ang tamang exception na gagamitin sa catch block.

Now, eto po ang isang sample code na ginamitan ng try-catch. Kunwari may iniintay tayong input sa user na int. Pero string ang pinapasok nya, so mag e-error yun at ika-catch natin yun at magtatanong uli sa user hanggang sa tama ang ipasok nya:

import java.util.InputMismatchException;
import java.util.Scanner;

public class TryCatchSample {

public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int userInput = 0;
boolean correctInput = false;
do {
try{
System.out.println("Input an integer: ");
userInput = scan.nextInt();
correctInput = true;
} catch (InputMismatchException e) {
System.out.println("Invalid input!");
scan.nextLine();
}
} while(!correctInput);
System.out.println(correctInput + " is a valid integer. End of program");
}

}

9 comments:

  1. salamat dito sir! napansin ko lang kapag above 10 ang ininput mong integer/number, Invalid input din siya.

    posible ba 'to sir, halimbawa ang gusto mong iinput 2 digits lang, 'pag more than 2, invalid input siya. yung parang sa visual basic na maxLength?

    ReplyDelete
  2. sir wala po akong binago sa code. :) i mean, 'pag nag-input ka nang more than 10 digits, invalid input din siya. ex. nag-input ka nang 12345678901 , invalid input siya. :)

    so, pwede pala gawin 'yung parang maxlength sa java.

    ReplyDelete
  3. sir, ay kasi po ang range lang ng integer ay
    -2,147,483,648 to 2,147,483,647. pag more than dyan po, mag e-error po talaga. kasi hanggan within that range lang po ang pwede ipasok sa int data type. :) if kelangan ng mas malaking range, ibang data type ang gagamitin natin. :)

    ReplyDelete
  4. ah Oo, sir salamat gets ko na. :)
    O yung parang maxLength, sir paano gawin 'yun? ex 2 digits lang pwede iinput. :) salamat ulit sir! :)

    ReplyDelete
  5. ah.. pakitry mo muna gawin sir. pag medyo nalito ka, post mo lang dito yung codes mo tapos saka natin gawin. para mapractice ka din ;)

    ReplyDelete
  6. This comment has been removed by the author.

    ReplyDelete
  7. sir paano po ba gawin 'to sa java or kahit sa c++?

    input value for n

    if n is a positve even integer
    ex. nag input ka yung value ng n is 4
    then yung output niya

    4 16 64 256
    3 9 27
    2 4
    1

    if n is a positive odd integer
    ex. 3 yung value ng n na ininput mo
    then yung output niya

    3 6 12
    2 4 8
    1 2 4

    else

    invalid input

    sana sir matulungan niyo ako dami ko kasi ginagawa ngayon. :( tapos sir i-cocompute ko pa yung running time ng algorithm niya. :) hehe

    ReplyDelete
  8. sure. nagawa ko na. inemail ko sya sa mail na sinend ng blogspot pero I think hindi mo yun makukuha. anyway, send ko na lang uli as private message sa symbianize. pagandahin mo na lang. notepad lang kasi gamit ko nung ginawa ko yan, nag format kasi ako ng PC eh JDK palang nadownload ko.

    ReplyDelete
  9. sana po gagawa kayo ng recorded video or youtube ng java beginners tutorial filipino/tagalog yung tuloy2 ang tutorial

    ReplyDelete