White Space Characters:
Spaces, tabs, line feed, carriage return

=================================================================

Java is blank insensitive
a sequence of white spaces = a single space (unless in a string).

=================================================================

Java is Case Sensitive

Variables are typed

Variables have a standard default value (0 for numbers)
but programs doesn't compile if you use a varaible without initializing 
yourself.

double y=5/3; --> gives a 1 (integer division)
 
cast operators : (operator) variable

y = (double) 5/3;

x=(y=5); same as x=y=5; or {y=5; x=5;

In Java assignment statements produce values i.e. y=5 produces the value 5


===============================================================

// Methods do not need to be in order.

	public class Example
	{
	public static void main (String argv [])
	  { 
	  	int script=6, acting=9, directing=5;
		displayMovieRating (script, acting, directing);
	  }

	  public static void displayMovieRating (int s, int a, int d)
	    {
		System.out.print("The Movie Rating is ");
		System.out.println (s+a+d);
	    }
    	}

===================================================================

// Methods do not need to be in same class
 
 public class Movie
        {
        public static int movieRating (int s, int a, int d)
		{ return s+a+d ; }
        } 


 public class Example
        {
        public static void main (String argv [])
          {
                int script=6, acting=9, directing=5;
                System.out.print("The Movie Rating is ");
                System.out.println (Movie. movieRating (script, acting, 
                                                            directing));
          }
        }


================================================================

// Java is a Polymorphic Language
// can have many methods with same name in same class.

public class Example
 { 
   public static void main (String argv[])
	{
	  int a =9, b=8, c=5;
	  double x=9.0, y=8.0, z=5.0;

	  movieRating (a, b, c);
	  movieRating (x, y, z);
 	}

   public static void movieRating (int s, int a, int d)
            {
                System.out.print("The Movie Rating is ");
                System.out.println (s+a+d);
            }
   public static void movieRating (double s, double a, double d)
              {
                System.out.print("The Movie Rating is ");
                System.out.println (s+a+d);
              }
  }

======================================================

System.out.print("The Movie Rating is ");
System.out.println (s+a+d);

------------------------------------------------------

System.out.println ("The rating is " + (s+a+d));

=======================================================

What about? Is it equivalent?

System .out.println ("The rating is " + s+a+d);

=======================================================

public class Movie 
 {
   public static final int wScript=5, wActing=4, wDirecting=1;
   public static int movieRating (int s, int a, int d)
	{ 
	  return wScript * s + wActing * a + wDirecting * d;  
	}
 }

------------------------------

// instance variables

public class Movie
 {
   public int script, acting, directing;
   public static int rating (Movie m)
	{ 
	  return m.script + m.acting + m.directing;
	}
 }


public class Example 
 {
  public static void main (String argv[])
	{
	  Movie m = new Movie();
          m.script = m.acting = m.directing = 5;
	  System.out.println (Movie.rating (m));
	}
 }  


------------------------------------------------------------------
 Some Notes :

if (grade > 70)
   System.out.println("Pass");
else
   System.out.println("Fail");
or 
   using operator ?:

System.out.println (grade > 70 ? "Pass" : "Fail");

System.out.println ("The Character ("+ 'a' +") has the code value " + 

((int) 'a'));

gives :

The character (a) has the code value 97 unicode of 'a'

differences between : "a", 'a' ?

===========================================================

public class Escape
{
 public static void main (String args[])
  {
	System.out.println("Single quotes :" + " \ 'A' ");
	System.out.println("Double quotes :" + " \ "B\" ");
	System.out.println("backslash : \\");
	System.out.println("Text seperated \t by tab");
	System.out.println("double \n \n spaced text");
	System.out.println("***** \r ###");
  }
}

------------------------
An applet

import java.applet.Applet;
import java.awt.Graphics;
public class HiThere extends Applet
{
  public void paint(Graphics g)
   {
     g.drawString ("Hi there!", 25, 25);
   }
}

==================================================================

1	// Class average program with
2	// sentinel-controlled repetition.

3	import java.io.*;
4	
5	public class Average {
6	  public static void main (String args[]) throws IOException
7	  {
8 	    double average; // number with decimal point 
9	    int counter, grade, total;
10	
11	    // initialization phase
12	   total=0;
13	   counter=0;
14	   
15	    // processing phase
16	   System.out.print( "Enter letter grade, z to end : " );
17	   System.out.flush();
18	   grade = System.in.read();
19	
20	   while (grade != 'Z') {
21	   	if (grade == 'A')
22		   total = total + 4;
23              if (grade == 'B')
24                 total = total + 3;
25              if (grade == 'C')
26                 total = total + 2;
27              if (grade == 'D')
28                 total = total + 1;
29              if (grade == 'F')
30                 total = total + 0;
31
32	   System.in.skip (1);
33	   counter = counter + 1;
34	   System.out.print( "Enter letter grade, z to end : " );
35         System.out.flush();
36         grade = system.in.read();
37	}
38
39	// termination phase
40	if (counter !=0) {
41	   average = (double) total / counter ;
42	   System.out.println ("Class average is " + average );
43	}
44	else
45	   System.out.print( "No grades were entered" );
46   }
47  }

================================================================

//  Constructors

public class Movie 
{
  public int script, acting, directing;
  public Movie()
   {
     script=5, acting=5, directing=5;
   }

  public int rating()
  { return script + acting + directing; }
}


public class Example
{
  public static void main (String argv [])
   {
     Movie m = new Movie();
     System.out.println ("The rating is" + m.rating ());
   }
}

==========================================================

//  Another constructor 

public Movie (int s, int a, int d)
{  script=s, acting=a, directing=d;  }



* default constructor ( initializes parameters to zero).

===========================================================

* private instance varaibles 

  public class Example
  {
    private int minutes; 
    public Example()  {  minutes=75;  }
    public Example(int d) { minutes=d ; }
    // getter function
    public int getMinutes()  { return minutes ; }
    // setter function
    public void setMinutes (int d)  {  minutes=d;  }
  }


Notes : 	in another class:
		Example x();
		x.minutes = 6; // OK?
		x.setMinutes(6); // OK?


============================================================

* inheritance

public class Parent {
  public int minutes;
  public Parent ()
  {
    System.out.println ("Calling constructor");
    minutes=75;
  }
  public int getMinutes()  {  return minutes;  } 
  public void setMinutes (int d) { minutes=d;  }
}


public class Movie extends Parent  
{
  public int script, acting, directing;
  public Movie()
  {
    script=5, acting=5, directing=5;
  }
  public Movie (int s, int a, int d)
  {  script=s; acting=a; directing=d;  }
  public int rating()
  {  return script + acting + directing ;  }
}


public class comedy extends Movie {
public int rating ()  {  retun 10 + acting + directing ;  }
}
====================================================================

* Absract classes (cannot have instances)

  public abstact class Parent 
  {
    public int minutes;
    public Parent()  { minutes=75 ; }
    public int getMinutes ()  {  return minutes ;  }
    public void setMinutes (int d) {  minutes=d;  }
    public abstact int rating();
  }


Parent x=new Parent();  // illegal
Parent x;		// OK
x=new Movie();
x.rating();  // error, not member method of Parent

to fix : ?

===================================================================

constructors calling other constructors within same class

public class Movie extends Parent  {
  public int script, acting, directing;
  public Movie() { script=5; acting=5; directing=5; }
  public Movie (int s, int a, int d)
    {  script=s, acting=a, directing=d;  }
  public Movie (int s, int a, int d, int m)
    {
      this (s,a,d); // no need to repeat code.
      minutes=m;
    }

  public int rating()  { return script = acting = directing ;  }
}

============================================================

constructor calling constructor in superclass

 public class Parent {
   public int minutes;
   public Parent() { minutes=75;  }
   public Parent (int m)
       { minutes=m;  }
   . . .
   }

 public class Movie extends Parent  {
 . . .
 public Movie (int m)
 { super (m);
 } 


-================================================================

* array intializer statement

int numbers [] = {10,20,30};

or

int numbers [] = new int [3];
numbers[0]=10;
numbers[1]=20;
numbers[2]=30;


Movie movies[] new Movie [3];
movies[0] = new Movie();
movies[0].script=6
..
..

or

Movie movies[]={new Movie(5,2,3),
new Movie (5,5,5),
new Movie (1,2,3);

===========================================================

* public class Example {
   public static void main (String argv[])
   { 
     int Counter, sum=0;
     int numbers[]= { 10,20,30 };
     for (counter=0; counter < numbers.length; ++counter)
        sum = sum + numbers[counter];
     System.out.print("The average of " + numbers.length);
     System.out.println("numbers is" + sum/numbers.length);
   }
}

-------------------

public abstract class Attraction {
  // First, define instance variables:
  public int minutes;
  public string title, poster;
  // Define constructors;
  public Attraction (int m) { minutes = m; }
  // Define getters and setters:
  public int getMinutes () {return minutes ; }
  public vois setMinutes (int d) { minutes=d ; }
  // Define rating as an abstract nmethod:
  public abstract int rating ();
  // Define category sa an abstract method:
  public abstract String category ();
  // Define displayAttraction:
  public void displayAttraction () {
    System.out.println(
      category() + " rated at "
      + rating() + " lasts "
      + getMinutes() + " Minutes "
     );
  }
}



public class Movie extends Attraction {
  // First, define instance variables:
  public int script, acting, directing;
  // Define zero-parameter constructor:
  public Movie () { script=5; acting=5; directing=5; }
  // Define one-parameter constructor:
  public Movie (int m) { super(m); }
  // Define three-parameter constructor:
  public Movie (int s, int a, int d) {
   script = s; acting = a; directing = d;
  }
  // Define four-parameter constructor:
  public Movie (int s, int a, int d, int m) {
   this (s, a, d);
   minutes m;
  }
  // Define rating:
  public int rating () { return script + acting + directing ; }
  // Define category:
  public String category () { return " Movie " ; }
 }


public class Symphony extends Attraction {  
  // First, define instance variables:
  public int music, playing, conducting;
  // Define zero-parameter constructor:
  public Symphony () { music=5; playing=5; conducting=5; }
  // Define one-parameter constructor:
  public Symphony (int m) { super(m); }
  // Define three-parameter constructor:
  public Symphony (int s, int a, int d) {
   music = s; playing = a; conducting = d;
  }
  // Define four-parameter constructor:
  public Symphony (int s, int a, int d, int m) {
   this (s, a, d);
   minutes m;
  }
  // Define rating:
  public int rating () { return music + playing + conducting ; }
  // Define category:
  public String category () { return " Symphony " ; }
 }

================================================

* equals method determines if two instances are the same.

  public class Example  {
    public static void main (String argv[])
    {
       Movie m1=new Movie(7,7,7);
       Movie m2=new Movie(7,7,5);
       System.out.println(m1.equals(m2));
       m2=m1;
       System.out.println(m1.equals(m2));
    }   
  }


=================================================================

* I/O from files

--> import java.io.*;  // import the I/O package


    file: "input.data" contains  2   4   6
				 10  5   7
				 3   16  2


--> FileInputStream inputFile = new FileInputStream ("input.data");
 
   //  to avoid whitespaces, read tokens

--> StreamTokenizer tokens = new StreamTokenizer(inputFile);

methods:
  
    tokens.nextToken( ) : gets first token and assigns it to nval
                          instance variable (it it is a number)
                          or to sval (if it is a string)

                          nextToken is a value returning
                          function; it returns the value of instance
                          variables TT_EOF or TT_WORD or
                          TT_NUMBER, depending on what was read.

instance variables:
                    tokens.nval is type double, use cast if need an
                    integer, i.e.  (int) tokens.nval 

====================================================================

import java.io.*;
public class Demonstrate  {
 public static void main(String argv[]) throws IOException  {
  FileInputStream inputFile = new FileInputStream("input.data");
  StreamTokenizer tokens = new StreamTokenizer (inputFile);
  while (tokens.nextToken() != tokens.TT_EOF)  {
    System.out.println("Integer : " + (int) tokens.nval) ;
   }
 }
}

------------------------ Sample Data ----------------------------
4 7 3
--------------------------  Result   ----------------------------
Integer : 4
Integer : 7
Integer : 3


=====================================================================

import java.io.*;
public class Demonstrate  {
 public static void main(String argv[]) throws IOException  {
  FileInputStream inputFile = new FileInputStream("input.data");
  StreamTokenizer tokens = new StreamTokenizer (inputFile);
  while (tokens.nextToken() != tokens.TT_EOF)  {
    int x = (int) tokens.nval;
    tokens.nexttoken(); int y = (int) tokens.nval;
    tokens.nexttoken(); int z = (int) tokens.nval;
    Movie m = new Movie(x,y,z);    
    System.out.println("Rating: " + m.rating()) ;
  }
 }
}
------------------------ Sample Data ----------------------------
4  7  3
8  8  7
2 10  5
--------------------------  Result   ----------------------------
Rating: 14
Rating: 23
Rating: 17
-----------------------------------------------------------------

==========================================================

public class Example {
  public static void main (String argv[])
  {
    int counter, sum=0;
    Parent attractions[] = { new Movie (4,3,5),
			     new Movie (5,5,5),
			     new Symphony (5.6.4) } ;
    for ( counter=0; counter < attractions.length; ++ counter)
        { sum=sum + attractions[counter].rating() ; }
    System.out.print("Average rating of" + attractions.length);
    System.out.println("atttractions is " + sum/attractions.length);
  }
}



import java.io.*;
public class Demonstrate  {
 public static void main(String argv[]) throws IOException  {
  FileInputStream inputFile = new FileInputStream("input.data");
  StreamTokenizer tokens = new StreamTokenizer (inputFile);
  int next = 0;
  while ((next = tokens.nextToken()) != tokens.TT_EOF)  {
    switch (next) {
     case tokens.TT_WORD: break;
     case tokens.TT_NUMBER:
        int x = (int) tokens.nval;
        tokens.nexttoken(); int y = (int) tokens.nval;
        tokens.nexttoken(); int z = (int) tokens.nval;
        Movie m = new Movie(x,y,z);
        System.out.println("Rating: " + m.rating()) ;
        break;
  }
  inputFile.close();
 }
}

------------------------ Sample Data ----------------------------
"Apocalypse Now"		4  7  3
"The String"			8  8  7 
"Bedtime for Bonzo"		2 10  5
--------------------------  Result   ----------------------------
Rating: 14
Rating: 23
Rating: 17
-----------------------------------------------------------------