Monday, April 13, 2009

Java Lesson 2 - Getting Input from the User

Ok, so far we have a working simple java application that displays a string sa console. It doesn't do anything neat pero its enough to get our feet wet on the basic use of eclipse and java. For the mean time, sa mga command line program muna tayo mag stick at hindi GUI para hindi kayo mabigla.

Its time we update our 'HelloWolrdSample' program. Kukuha tayo ng input sa user sa command line. Eto yung updated code:

package com.pinoyjavatutorial;

import java.util.Scanner; //added


public class HelloWorld {


/**

* @param args

*/
public static void main(String[] args) {
// TODO Auto-generated method stub

Scanner scan = new Scanner(System.in); //added

String name = null; //added
System.out.println("Input your name: "); //added
name = scan.nextLine(); //added
System.out.println("Hello World from " + name); //updated
}
}


Now, explain ko yung mga ginagawa ng mga dinagdag pati ng inap-date:

import java.util.Scanner;
- it tells JVM to import yung Scanner na class na nasa loob ng java.util. Pag hindi kasi inimport yun, hindi magagamit yung Scanner na class. Parang yung sa '#include' ito sa C/C++.

Scanner scan = new Scanner(System.in);
-bale dito, nag declare tayo ng scan na object na ang type ay Scanner at nilagyan na din natin ng laman. Actually short cut na statement ito eh. Eto talaga yung code niya:
Scanner scan;
scan = new Scanner(System.in);
Yung 'Scanner scan;' na line ay yung declaration. Nagdeclare tayo na si 'scan' ay isang Scanner na object. Pero wala pa syang laman. Basta sinabi lang na meron 'scan' na object at ang type nya ay 'Scanner'. Yung 'scan = new Scanner(System.in);' sinasabi naman nun na itong si 'scan', which we declared earlier, ay magkakaroon ng instance ng Scanner na object at si 'System.in' ay parameter nya. Kahit wag nyo muna intindihin yung about sa instance at kung bakit may 'new' na keyword dun. Basta sa ngayon, ang mahalaga na alam nyo ay si 'scan' ay isang object na ang type ay 'Scanner' na nilagyan ng instance ng Scanner na object.

String name = null;
-Simple declaration of a string with a 'null' value. Medyo tricky tong part na to. Kasi sa usual conversation, when we say null, it gives an impression na blank sya. Pero in java, yung blank and null are different. Pag sa null, wala talaga syang laman a.k.a void reference. Pag sinabing blank, meron syang laman, blank nga lang. Kaya sa case na to, yung 'name' na string, it doesn't refer to anything sa memory ng computer. Kaya kung ipi-print natin ang laman nya, sasabihin ng JVM na 'null' sya. Pero kung ang ginawa natin ay:
String name = "";
Meronng laman si 'name', blank nga lang ang laman nya. Kaya pag ipi-print natin sya, blank lang ang lalabas. Sa susunod na mga lessons, using 'if' statements, we'll try to compare ang blank at null strings para mas makita nyo ang ibig kong sabihin.

System.out.println("Input your name: ");
-Alam nyo na to. It just prints the string 'Input your name: ' sa console.

name = scan.nextLine();
-Ok, sa line na to, 'scan' will give a string type data from the keyboard to 'name'. At since string input sya, kahit number pa ang ilagay ng user, that will be treated as type string.

System.out.println("Hello World from " + name);
-Dito, ipi-print ang string na 'Hello World from ' at yung value ni 'name'.

Running the program
1. Sa 'Package Explorer' na window, right click on 'HelloWorld.java'. Then go to 'Run As' -> 'Java Application'.
2. May lalabas na ganto sa baba ng eclipse na window:
Click nyo lang yung loob ng 'Console' na tab para dun mapunta ang cursor.
3. Input your name and press 'Enter'
4. It will display the 'Hello World from ' string and your name.

Congratulations! You are able to get a user input and print it using java! :)

Nga pala, baka may magtanong, bakit hindi 'BufferedReader' yung ginamit natin. Well, mas madali kasi gamitin at ituro sa mga new beginners pag ginamit ang 'Scanner' instead of 'BufferedReader'. Compare nyo to, ano ang mas madali sauluhin at intindihin?:

BufferedReader br = new Bufferedreader(InputStreamReader(System.in));

or ito

Scanner scan = new Scanner(System.in);


Diba mas madali ang Scanner kasi wala nang 'InputStreamReader'. Not to mention na kapag sa 'BufferedReader', dalawa ang i-iimport mo: yung 'BufferedReader' at 'InputStreamReader' na class. Eh sa 'Scanner', 'Scanner' lang. :)

3 comments:

  1. sir, ngayon ko lang na encounter yung Scanner scan = new Scanner(System.in);
    mukhang ngang madali siya kesa sa BufferedReader na sabi mo nga dalawa pa yung kelangan i-import. saka sa Scanner wala na yung throws IOException.
    pero alin ba sa dalawa ang mas effecient sir sa runtime in terms of file reading? o parehas lang? Scanner na gagamitin ko

    ReplyDelete
  2. bro, sa tingin ko depende sa file na babasahin mo. :)

    ReplyDelete
  3. idol.. paano gamiitn ang BufferReader? mag input xa ng 5 sentences or word in 5 lines... hingi ako ng code sir pra malaman ko paano gamitin ang StringBuffer tnx

    ReplyDelete