Professional Documents
Culture Documents
Programimi Dhe Algoritmet PDF
Programimi Dhe Algoritmet PDF
Faton M. Berisha
fberisha@uni-pr.edu
Universiteti i Prishtinës
Fakulteti i Shkencave Matematike–natyrore
Web sajte:
http://www.fshmn.uni-pr.edu/fberisha
http://fberisha.netfirms.com
http://www.cis.ksu.edu/santos/schmidt/ppj
http://java.sun.com
Literatura:
D. Schmidt, Programming principles in Java:
Architectures and Interfaces.
I. Horton, Beginning Java 2, Wrox Press, 2000.
Controller
main
Model
insertText
Input View Output View
deleteText
getRequest redisplayDocument
reformatLines
getText printDocument
...
contentsOf
Objektivat:
Të prezantohet formati standard i një Java programi
dhe të ilustrohen shembuj klase, metode dhe objekti
në Java.
Të shpjegohen hapat që ndërrmirren për të rradhitur
një program, kontrolluar sintaksën e tij dhe ekzekutuar
atë.
Të tregohet si një objekt mund të dërgojë mesazhe
objekteve tjerë, madje edhe të krijojë objekte tjerë
gjatë ekzekutimit.
Hello
main
System.out
println
Hello
public static void main(String[] args)
{ System.out.println("Tungjatjeta botë!");
System.out.println(2005);
}
System.out
...
println(...)
{ instruksione për të shtypur tekst }
Hello
public static void main(String[] args)
{ > System.out.println("Tungjatjeta botë!");
System.out.println(2005);
}
System.out
...
println(...)
{ instruksione për të shtypur tekst }
Hello
public static void main(String[] args)
{ > PRIT
System.out.println(2005);
}
System.out
...
println(...)
{ > instruksione për të shtypur tekst }
Hello
public static void main(String[] args)
{ ...
> System.out.println(2005);
}
System.out
...
println(...)
{ instruksione për të shtypur tekst }
Hello
public static void main(String[] args)
{ ...
> PRIT
}
System.out
...
println(...)
{ > instruksione për të shtypur tekst }
Hello
public static void main(String[] args)
{ ...
...
> }
System.out
...
println(...)
{ instruksione për të shtypur tekst }
NameAndDate GregorianCalendar
main getTime
System.out
println
print
import java.util.*;
/** Afishon emrin tim dhe kohën e datën e saktë. */
public class NameAndDate
{ public static void main(String[] args)
{ System.out.print("Filan Fisteku --- ");
// Urdhëri vijues krijon një objekt
GregorianCalendar c = new GregorianCalendar();
System.out.println(c.getTime()); // afisho përgjegjjen
System.out.println();
System.out.println("Mbaroi");
}
}
NameAndDate
public static void main(String[] args)
{ > System.out.print("Filan Fisteku --- ");
GregorianCalendar c = new GregorianCalendar();
System.out.println(c.getTime());
System.out.println();
System.out.println("Mbaroi");
}
System.out
...
print(...)
{ instruksione për të shtypur tekst }
println(...)
{ instruksione për të shtypur tekst
dhe terminuar rreshtin
}
NameAndDate System.out
public static void main(String[] args) ...
{ ...
> GregorianCalendar c = new GregorianCalendar();
System.out.println(c.getTime());
System.out.println();
System.out.println("Mbaroi");
}
a1 : GregorianCalendar
...
getTime()
{ instruksione për lexim të orës dhe kthim të kohës }
NameAndDate System.out
public static void main(String[] args) ...
{ ...
GregorianCalendar c == a1
> System.out.println(c.getTime());
System.out.println();
System.out.println("Mbaroi");
}
a1 : GregorianCalendar
...
getTime()
{ instruksione për lexim të orës dhe kthim të kohës }
NameAndDate System.out
public static void main(String[] args) ...
{ ...
GregorianCalendar c == a1
> System.out.println(PRIT);
System.out.println();
System.out.println("Mbaroi");
}
a1 : GregorianCalendar
...
getTime()
{ > instruksione për lexim të orës dhe kthim të kohës }
NameAndDate System.out
public static void main(String[] args) ...
{ ...
GregorianCalendar c == a1
> System.out.println("Wed Nov 03 10:45:00 CET 2004");
System.out.println();
System.out.println("Mbaroi");
}
a1 : GregorianCalendar
...
getTime()
{ instruksione për lexim të orës dhe kthim të kohës }
Objektivat:
Të futet nocioni i tipit të së dhënës, i cili siguron
konsistencë gjatë llogaritjeve.
Të futen variablat kompjuterike dhe zbatimet
tradicionale të tyre.
Të jepet një mënyrë e thjeshtësuar por efektive për t’i
dhënë të dhënat hyrëse programit.
1 + ((2 - 3) * 4) + 5
=> 1 + ((-1) * 4) + 5
=> 1 + (-4) + 5
=> -3 + 5
=> 2
Total
public static void main(String[] args)
{ int gjysma == 4
int njezeta == 2
int dhjeta == 0
int pesa == 1
int qindarka == 6
>System.out.println("Për këto sasi metelikësh:");
System.out.println("Gjysma = " + gjysma);
...
}
Shembuj:
int money = 0;
money = 100;
money = money + 50; // money += 50;
MakeChange
public static void main(String[] args)
{ int euros == 3
int cents == 46
int money == 346
>System.out.println("Gjysma = " + (money / 50));
money = money % 50;
System.out.println("Njëzetqindarka = " + (money / 20));
money = money % 20;
...
}
MakeChange
public static void main(String[] args)
{ int euros == 3
int cents == 46
int money == 46
...
>System.out.println("Njëzetqindarka = " + (money / 20));
money = money % 20;
...
}
Forma postfikse:
int count = 10;
count++; // sikur count = count + 1
Forma prefikse:
++count; // sikur count = count + 1
Forma postfikse:
count--; // sikur count = count - 1
Forma prefikse:
--count; // sikur count = count - 1
int numApples = 5;
int numOranges = 10;
int numFruit = 0;
Shembull:
int i = 1;
double d = i;
Shembull jokorrekt:
double d = 1.6;
int i = d;
Programuesi mund të shfrytëzojë shprehjen e konvertimit
(cast expression):
double d = 1.6;
int i = (int)d; // Vlera e cunguar
Sintaksa:
NDRYSHORE OP= SHPREHJE
Shembuj:
count += 5; // sikur count = count + 5
money %= 50; // sikur money = money % 50
++ postfix, -- postfix
- unar, ++ prefix, -- prefix
*, /, %
+, -
<, <=, >, >=
==, !=
operatorët OP=
Tabela 1. Përparësia e operatorëve themelorë
Shembull:
b = 3 * 2 == 5 + 1;
Stringjet janë objekte në Java dhe operacionet me stringje janë metoda; p.sh.,
Karakteri Semantika
\b backspace
\t tab
\n rresht i ri (newline)
\r return
\" thonjëza e dyfishtë
\’ thonjëza e njëfishtë
\\ backslash
( ( -3 * i ) +d ) > 2
int
double double
double
double double
boolean
double d = 2.5;
GregorianCalendar c = new GregorianCalendar();
Formatizimi i numrave:
import java.text.*;
public class Test
{ public static void main(String[] args)
{ DecimalFormat formatter = new DecimalFormat("0.00");
double d = 100.0 / 3.0;
String s = formatter.format(d);
System.out.println(s + " Euro");
}
}
class DecimalFormat gjendet në pakon java.text. Posedon metodën format(d)
e cila kthen vlerën e formatizuar në decimale të numrit d, mbështetur në shabllonin e
zbatuar në new DecimalFormat(SHABLLON).
import java.text.*;
/** Konverton vlerën e temperaturës. */
public class FahrenheitToCelsius
{ public static void main(String[] args)
{ int f = new Integer(args[0]).intValue();
double c = (5.0/9.0) * (f - 32);
System.out.println("Për gradë Fahrenheit " + f + ",");
DecimalFormat formatter = new DecimalFormat("0.0");
System.out.println("gradë Celsius " + formatter.format(c));
}
}
FahrenheitToCelsius
main(args[0] == "70" )
{ >int f = new Integer(args0).intValue();
double c = (5.0/9.0) * (f - 32);
System.out.println("Për gradë Fahrenheit " + f + ",");
DecimalFormat formatter = new DecimalFormat("0.0");
System.out.println("gradë Celsius " + formatter.format(c));
}
FahrenheitToCelsius
main(args[0] == "70" )
{ int f == ?
>f = new Integer(args[0]).intValue();
double c = (5.0/9.0) * (f - 32);
...
}
FahrenheitToCelsius
main(args[0] == "70" )
{ int f == ?
>f = new Integer("70").intValue();
double c = (5.0/9.0) * (f - 32);
...
}
FahrenheitToCelsius
main(args[0] == "70" )
{ int f == ?
>f = a1.intValue();
double c = (5.0/9.0) * (f - 32);
...
}
a1 : Integer
përmban 70
intValue()
{ metodë e cila kthen 70 }
FahrenheitToCelsius
main(args[0] == "70" )
{ int f == ?
>f = PRIT;
double c = (5.0/9.0) * (f - 32);
...
}
a1 : Integer
përmban 70
intValue()
{ >metodë e cila kthen 70 }
FahrenheitToCelsius
main(args[0] == "70" )
{ int f == ?
>f = 70;
double c = (5.0/9.0) * (f - 32);
...
}
FahrenheitToCelsius
main(args[0] == "70" )
{ int f == 70
>double c = (5.0/9.0) * (f - 32);
System.out.println("Për gradë Fahrenheit " + f + ",");
DecimalFormat formatter = new DecimalFormat("0.0");
System.out.println("gradë Celsius " + formatter.format(c));
}
System.out.println( (1+2(*3 );
string s = 3;
System.out.println(3+true);
int i;
System.out.println(2 * i);
int a = 1;
double a = 2.5;
System.out.println(a);
System.out.println( (1+2)*3 );
String s = "3";
System.out.println(3+1);
int i = 0;
System.out.println(2 * i);
int a = 1;
double b = 2.5;
System.out.println(a);
int i = 0;
System.out.println(1 / i);
i = new Integer(args[0]).intValue();
System.out.println(1 / i);
int x = 3;
int y = 7;
System.out.println(x = y);
int x = 3;
int y = 7;
System.out.println(x == y);
Objektivat:
Të zbatohet hyrje interaktive, ku një aplikacion mund të
ketë interaksion me shfrytëzuesin dhe të kërkojë input
kur është e nevojshme për kompjutim.
Të shfrytëzohet inheritimi për të disenjuar dritare
grafike që afishojnë output në forma teksti, ngjyrash
dhe figurash.
Të tregohet si një objekt mund të „mbajë mend“
„gjendjen“ e kompjutimit me anë të variablave të
fushave.
Controller
main
import java.text.*;
import javax.swing.*;
/** FahrenheitToCelsius konverton vlerën e temperaturës
* input: gradët Fahrenheit, int
* output: gradët Celsius, double
*/
public class FahrenheitToCelsius
{ public static void main(String[] args)
{ String input = JOptionPane.showInputDialog("Gradë Fahrenheit:");
int f = new Integer(input).intValue();
double c = (5.0/9.0) * (f - 32);
DecimalFormat formatter = new DecimalFormat("0.0");
System.out.println("Për gradë Fahrenheit " + f + ",");
System.out.println("gradë Celsius " + formatter.format(c));
}
}
FahrenheitToCelsius
main
JOptionPane System.out
showInputDialog println
Integer DecimalFormat
intValue format
import java.text.*;
import javax.swing.*;
/** FahrenheitToCelsius konverton vlerën e temperaturës
* input: gradët Fahrenheit, int
* output: gradët Celsius, double
*/
public class FahrenheitToCelsius
{ public static void main(String[] args)
{ String input = JOptionPane.showInputDialog("Gradë Fahrenheit:");
int f = new Integer(input).intValue();
double c = (5.0/9.0) * (f - 32);
DecimalFormat formatter = new DecimalFormat("0.0");
JOptionPane.showMessageDialog(null, f + " Fahrenheit janë "
+ formatter.format(c) + " Celsius");
}
}
import javax.swing.*;
/** FrameTest krijon një kornizë */
public class FrameTest
{ public static void main(String[] args)
{ JFrame sampleFrame = new JFrame();
System.out.println("Ku është korniza?");
}
}
import javax.swing.*;
/** FrameTest krijon dhe afishon një kornizë */
public class FrameTest
{ public static void main(String[] args)
{ JFrame sampleFrame = new JFrame();
sampleFrame.setSize(300, 200);
sampleFrame.setVisible(true);
System.out.println("Korniza u shfaq!");
}
}
import java.awt.*;
import javax.swing.*;
public class TestPanel extends JPanel
{ public void paintComponent(Graphics g)
{ // ... instruksionet të cilat vizatojnë mbi panelin
}
}
Penda grafike g është objekti i cili vizaton mbi panelin. Penda grafike shfrytëzon
klasa nga biblioteka java.awt.
Hyrja (input), dalja (output) dhe gjendja – fq. 14
Përshtatja e panelave me trashigimi –
Vazhdim
import java.awt.*;
import javax.swing.*;
/** TestPanel krijon një panel që afishon një string */
public class TestPanel extends JPanel
{ /** paintComponent vizaton panelin
* @param g - penda grafike */
public void paintComponent(Graphics g)
{ g.setColor(Color.red);
g.drawString("Tungjatjeta!", 30, 80);
}
}
import javax.swing.*;
/** FrameTest krijon dhe afishon një kornizë,
* dhe fut një panel në të. */
public class FrameTest3
{ public static void main(String[] args)
{ TestPanel samplePanel = new TestPanel();
JFrame sampleFrame = new JFrame();
sampleFrame.getContentPane().add(samplePanel);
sampleFrame.setSize(300, 200);
sampleFrame.setVisible(true);
System.out.println("Korniza u shfaq e shkruar!");
}
}
FrameTest a1 : TestPanel
main(...) paintComponent(g == a2 )
{ samplePanel == a1 { ... }
sampleFrame == a3 Instruksionet nga klasa JPanel
...
}
a2 : Graphics a3 : JFrame
setColor(...) { ... } setSize(...) { ... }
drawString(...) { ... } setVisible(...) { ... }
... ...
[Objekti Graphics konstruktohet
automatikisht me TestPanel.]
FrameTest TestPanel
main paintComponent
JFrame
Graphics
getContentPane JPanel
setColor
setSize
drawString
setVisible
import java.awt.*;
import javax.swing.*;
/** MyPanel krijon një panel me ngjyra */
public class MyPanel extends JPanel
{ /** paintComponent vizaton mbi panelin
* @param g -- penda grafike */
public void paintComponent(Graphics g)
{ g.setColor(Color.red);
int left = 100;
int top = 70;
int width = 90;
int height = 60;
g.drawRect(left, top, width, height);
int diameter = 40;
g.fillOval(left + width - diameter, top, diameter, diameter);
}
}
import java.awt.*;
import javax.swing.*;
/** FrameTest2 afishon një dritare me ngjyra */
public class FrameTest2
{ public static void main(String[] args)
{ JFrame myFrame = new JFrame();
myFrame.getContentPane().add(new MyPanel());
myFrame.setTitle("Vizatuesi im i kornizave");
myFrame.setBackground(Color.white);
int width = 300;
int height = 200;
myFrame.setSize(width, height);
myFrame.setVisible(true);
}
}
70
100
200
300
70
100
60
90
70
100 40
40
Metoda Semantika
setColor(c) Mbush pendën me ngjyrën
drawLine(x1, y1, x2, y2) Vizaton segmentin
drawString(s, x, y) Afishon stringun të pozicionuar
sipas koordinatave
drawRect(x, y, width, height) Vizaton drejtkëndëshin
fillRect(x, y, width, height) Mbush drejtkëndëshin
drawOval(x, y, width, height) Vizaton elipsën
fillOval(x, y, width, height) Mbush elipsën
fillArc(x, y, width, height, Vizaton pjesën e harkut të elipsës
startAngle, thickness)
import java.awt.*;
import javax.swing.*;
import java.util.*;
/** ClockWriter vizaton një orë */
public class ClockWriter extends JPanel
{ public ClockWriter()
{ int width = 200;
JFrame clockFrame = new JFrame();
clockFrame.getContentPane().add(this);
clockFrame.setTitle("Ora");
clockFrame.setBackground(Color.white);
clockFrame.setSize(width, width);
clockFrame.setVisible(true);
}
Fraza
new ClockWriter()
ka semantikën vijuese:
Konstruktohet një ClockWriter objekt në memorien
qendrore;
Objektit të ri i dërgohet mesazh për të ekzekutuar
instruksionet në konstruktorin e tij, të quajtur poashtu
ClockWriter.
import java.awt.*;
import javax.swing.*;
/** FieldExample: Afishon numrin e ngjyrosjeve të dritares */
public class FieldExample extends JPanel
{ private int count; // numri i ngjyrosjeve të dritares
/** FieldExample: konstrukton dritaren */
public FieldExample()
{ count = 0; // dritarja akoma nuk është ngjyrosur
JFrame myFrame = new JFrame();
myFrame.getContentPane().add(this);
myFrame.setTitle("Shembull fushe");
int height = 200;
myFrame.setSize(3 * height / 2, height);
myFrame.setVisible(true);
}
FieldExample a2 : Graphics
main(...) setColor(...) { ... }
{ ... > } drawString(...) { ... }
...
a1 : FieldExample
private int count == 0
paintComponent( g == a2 ) a3 : JFrame
{ count = count + 1; setSize(...) { ... }
... setVisible(...) { ... }
} ...
ClockWriter JPanel
paintComponent
Graphics
GregorianCalendar setColor
get drawString
Semantika e fushave:
Qeliza e fushës krijohet kur edhe vetë objekti.
Fusha mund të inicializohet me vetë krijimin, në
instruksionin e deklarimit. Në qoftë se fusha nuk
inicializohet gjatë deklarimit, atëherë preferohet që të
inicializohet përbrenda metodës konstruktor.
Vlera në qelizën e një fusheje mbahet edhe kur nuk
ekzekutohet asnjë metodë e objektit.
Emrat e fushave nuk duhet të rideklarohen përbrenda
ndonjë metode.
import java.awt.*;
import javax.swing.*;
import java.text.*;
/** Konverton vlerën e temperaturës. */
public class FahrenheitToCelsiusWriter extends JPanel
{ private int fahrenheit;
private double celsius;
private int leftMargin = 20;
private int lineHeight = 20;
/** Konstruktori. */
public FahrenheitToCelsiusWriter()
{ String input = JOptionPane.showInputDialog("Gradë Fahrenheit:");
fahrenheit = new Integer(input).intValue();
celsius = (5.0/9.0) * (fahrenheit - 32);
int frameHeight = 200;
JFrame f = new JFrame();
f.getContentPane().add(this);
f.setTitle("Celsius në Fahrenheit");
f.setBackground(Color.white);
f.setSize(3 * frameHeight / 2, frameHeight);
f.setVisible(true);
}
Objektivat:
Të shkruhen metoda publike dhe private të cilat marrin
argumente (parametra) dhe kthejnë rezultate.
Të shkruhen klasa që përmbajnë metoda të cilat
rishfrytëzohen sërish.
Të lexohen dhe shkruhen specifikime interfejsash, të
cilat përshkruajnë sjelljet e klasave dhe metodave të
tyre.
import java.awt.*;
import javax.swing.*;
public class MyPanel extends JPanel
{ public MyPanel()
{ // ... Instruksionet për konstruktimin dhe inicializimin
// e panelit
}
System.out.println("TEKSTI");
DrawArt
main
{ 1> AsciiArtWriter writer = new AsciiArtWriter();
...
}
DrawArt a1 : AsciiArtWriter
main AsciiArtWriter()
{ AsciiArtWriter writer == ? ; { 2> System.out.println(); }
1> writer = PRIT public void printBee() {...}
... public void printButterfly() {...}
} public void printLadybug() {...}
DrawArt a1 : AsciiArtWriter
main public void printBee() {...}
{ AsciiArtWriter writer == ? ; public void printButterfly() {...}
1> writer = a1 public void printLadybug() {...}
...
}
DrawArt a1 : AsciiArtWriter
main public void printBee() {...}
{ AsciiArtWriter writer == a1 ; public void printButterfly() {...}
... public void printLadybug() {...}
1> writer.printBee();
...
}
DrawArt a1 : AsciiArtWriter
main public void printBee()
{ AsciiArtWriter writer == a1 ; { 2> System.out.println(...);
... ...
1> PRIT }
... public void printButterfly() {...}
} public void printLadybug() {...}
DrawArt a1 : AsciiArtWriter
main public void printBee() {...}
{ AsciiArtWriter writer == a1 ; public void printButterfly() {...}
... public void printLadybug() {...}
1> System.out.println("Test");
...
}
DrawArt
main
{ AsciiArtWriter writer == a1 ;
String s == "Tringa" ;
1> writer.printBeeWithName(s);
...
}
a1 : AsciiArtWriter
public void printBee() {...}
public void printButterfly() {...}
public void printLadybug() {...}
public void printBeeWithName(String name) {...}
DrawArt
main
{ AsciiArtWriter writer == a1 ;
String s == "Tringa" ;
1> writer.printBeeWithName("Tringa");
...
}
a1 : AsciiArtWriter
public void printBee() {...}
public void printButterfly() {...}
public void printLadybug() {...}
public void printBeeWithName(String name) {...}
DrawArt
main
{ AsciiArtWriter writer == a1 ;
String s == "Tringa" ;
1> PRIT
...
}
a1 : AsciiArtWriter
...
public void printBeeWithName
{ 2> String name = "Tringa";
System.out.println(...);
...
}
...
DrawArt
main
{ AsciiArtWriter writer == a1 ;
String s == "Tringa" ;
1> PRIT
...
}
a1 : AsciiArtWriter
...
public void printBeeWithName
{ String name == "Tringa"
2> System.out.println(...);
...
}
...
Çdo vlerë e cila mund t’i shoqërohet (ndahet për vlerë) një
variableje mund të jetë parametër aktual. Parametri aktual
duhet të jetë kompatibil me parametrin formal.
import java.text.*;
/** Kryen operacione matematike. */
public class MathOperations
{ /** Afishon numrin invers të një numri të plotë
* të formatizuar në tri vende decimale.
* @param i numri i plotë i cili invertohet */
public void printInverse(int i)
{ DecimalFormat formatter = new DecimalFormat("0.000");
double d = 1.0 / i;
String s = formatter.format(d);
System.out.println(s);
}
}
Struktura e komponenteve: Ndërtimi i metodave dhe klasave – fq. 25
Format e parametrave – Vazhdim
import javax.swing.*;
import java.awt.*;
/** Krijon dritare grafike e cila afishon një fjali. */
public class MyWriter extends JPanel
{ private int width;
private int height;
private String sentence = "";
private int xPosition;
private int yPosition;
import javax.swing.*;
/** Afishon në dritare grafike një fjali të futur. */
public class MyWriterTest
{ public static void main(String args)
{ int width = 300;
int height = 200;
MyWriter writer = new MyWriter(width, height);
writer.repositionSentence(50, 80);
String s = JOptionPane.showInputDialog("Rradhisni ca tekst:");
writer.writeSentence(s);
}
}
import javax.swing.*;
/** ConvertorTest teston konvertorin e temperaturave */
public class ConvertorTest
{
public static void main(String args)
{ String input =
JOptionPane.showInputDialog("Gradë Fahrenheit:");
int f = new Integer(input).intValue();
TemperatureConvertor convert = new TemperatureConvertor();
double c = convert.fahrenheitToCelsius(f);
MyWriter writer = new MyWriter(300, 200);
writer.writeSentence(f + " Fahrenheit janë " + c + " Celsius");
}
}
ConvertorTest
main
{ int f == 68.0
1> TemperatureConvertor convert = new TemperatureConvertor();
double c = convert.fahrenheitToCelsius(f);
...
}
ConvertorTest
main
{ int f == 68.0
TemperatureConvertor convert == a1
1> double c = convert.fahrenheitToCelsius(f);
...
}
a1 : TemperatureConvertor
public double fahrenheitToCelsius(double f) {...}
ConvertorTest
main
{ int f == 68.0
TemperatureConvertor convert == a1
double c == ?
1> c = PRIT;
...
}
a1 : TemperatureConvertor
fahrenheitToCelsius
{ double f == 68.0
double c == 20.0
2> return c;
}
ConvertorTest
main
{ int f == 68.0
TemperatureConvertor convert == a1
double c == ?
1> c = 20.0;
...
}
a1 : TemperatureConvertor
public double fahrenheitToCelsius(double f) {...}
import javax.swing.*;
import java.awt.*;
/** Vizaton tri ve të renditura. */
public class StackedEggWriter extends JPanel
{ private int frameWidth;
private int frameHeight;
private int egg1Size;
private int egg2Size;
private int egg3Size;
/** Konstruktori.
* @param width gjerësia e panelit
* @param height lartësia e panelit
* @param size1 gjerësia e vesë së poshtme
* @param size2 gjerësia e vesë së mesme
* @param size3 gjerësia e vesë së sipërme */
public StackedEggWriter(int width, int height,
int size1, int size2, int size3)
{ frameWidth = width; frameHeight = height;
egg1Size = size1; egg2Size = size2;
egg3Size = size3;
JFrame myFrame = new JFrame();
myFrame.getContentPane().add(this);
myFrame.setTitle("Mullar vezësh");
myFrame.setBackground(Color.yellow);
myFrame.setSize(frameWidth, frameHeight);
myFrame.setVisible(true);
}
Struktura e komponenteve: Ndërtimi i metodave dhe klasave – fq. 55
Përsëritja e një aktiviteti me metodë
private – Vazhdim
Objektivat:
PRANUESI.METODA(ARGUMENTET)
TESTI?
true false
URDHËRAT1 URDHËRAT2
import javax.swing.*;
/** Konverton orët në sekonda.
* Input: numër i plotë jonegativ
* Output: koha e konvertuar në sekonda */
public class ConvertHours
{ public static void main(String[] args)
{ int hours = new Integer(
JOptionPane.showInputDialog("Numri i orëve")).intValue();
if ( hours >= 0 )
{ int seconds = hours * 60 * 60;
JOptionPane.showMessageDialog(null,
hours + " orë janë " + seconds + " sekonda");
}
else
{ JOptionPane.showMessageDialog(null,
"Gabim: hyrje negative " + hours);
}
}
}
import javax.swing.*;
/** Llogarit sasinë e metelikeve.
* Input: dy numra të dhënë në rreshtin komandues
* sasia e eurove dhe sasia e centëve
* Output: sasitë e metelikëve */
public class MakeChange
{ public static void main (String[] args)
{ int euros = new Integer(args[0]).intValue();
if ( euros < 0 )
{ JOptionPane.showMessageDialog(null,
"Gabim: euro negativë " + euros);
}
else
{ int cents = new Integer(args[1]).intValue();
if ( cents < 0 )
{ JOptionPane.showMessageDialog(null,
"Gabim: cent negativë " + cents);
}
else
{ if ( cents > 99 )
{ JOptionPane.showMessageDialog(null,
"Gabim: në cent " + cents);
}
else
{ int money = (euros * 100) + cents;
System.out.println("Gjysma = " + (money / 50));
money = money % 50;
System.out.println("Njëzetqindarka = " + (money / 20));
money = money % 20;
System.out.println("Dhjetëqindarka = " + (money / 10));
money = money % 10;
System.out.println("Pesëqindarka = " + (money / 5));
money = money % 5;
System.out.println("Qindarka = " + money);
}
}
}
}
}
lexo eurot;
euro negative?
lexo centët;
gabim
cent negativë?
total të holla;
gabim
llogarit metelikët
import javax.swing.*;
/** Llogarit sasinë e metelikeve
* Input: dy numra të dhënë në rreshtin komandues
* sasia e eurove dhe sasia e centëve
* Output: sasitë e metelikëve */
public class MakeChange4
{ public static void main (String[] args)
{ boolean ok = true; // memoron korrektësinë e të dhënave hyrëse
int euros = new Integer(args[0]).intValue();
int cents = new Integer(args[1]).intValue();
if ( euros < 0 )
{ JOptionPane.showMessageDialog(null,
"Gabim: euro negativë " + euros);
ok = false; // gabimi mohon korrektësinë
}
import javax.swing.*;
/** Llogarit sasinë e metelikeve
* Input: dy numra të dhënë në rreshtin komandues
* sasia e eurove dhe sasia e centëve
* Output: sasitë e metelikëve */
public class MakeChange
{ public static void main (String[] args)
{ int euros = new Integer(args[0]).intValue();
int cents = new Integer(args[1]).intValue();
if ( (euros < 0) || (cents < 0) || (cents > 99) )
{ JOptionPane.showMessageDialog(null,
"Gabim në hyrje " + euros + " " + cents); }
else
{ int money = (euros * 100) + cents;
System.out.println("Gjysma = " + (money / 50));
money = money % 50;
System.out.println("Njëzetqindarka = " + (money / 20));
money = money % 20;
System.out.println("Dhjetëqindarka = " + (money / 10));
money = money % 10;
System.out.println("Pesëqindarka = " + (money / 5));
money = money % 5;
System.out.println("Qindarka = " + money);
}
}
}
else { if ( hour == 12 )
{ if ( am )
{ answer = answer + "0"; }
else { answer = answer + "12"; }
}
else { if ( am )
{ answer = answer + hour; }
else { answer = answer + (hour + 12); }
}
answer = answer + ":";
if ( minute < 10 )
{ answer = answer + "0"; }
answer = answer + minute;
}
return answer;
}
Semantika:
1. Llogaritet SHPREHJA në vlerën e saj, të themi, v.
2. Në qoftë se ndonjë nga VLERAk është e barabartë
me v, atëherë ekzekutohen urdhërat përkatëse
URDHËRATk ; në qoftë se asnjë nga VLERAk nuk është
e barabartë me v, atëherë ekzekutohen urdhërat
URDHËRATn+1;
Shembull:
switch(ch)
{ case ’C’: case ’c’: { // Celsius
// ...
break;
}
case ’F’: case ’f’: { // Fahrenheit
// ...
break;
}
case ’K’: case ’k’: { // Kelvin
// ...
break;
}
default: { System.out.println("Gabim: TempConverter"); }
}
KONTROLLUESI
MODELI
Komponenta view merr përgjegjësinë për bartjen e të dhënave hyrëse dhe dalëse.
import javax.swing.*;
/** Modelon një konto. */
public class BankAccount
{ private int balance; // invariantë: balance >= 0
/** Konstruktori.
* @param amount - balansi inicial */
public BankAccount(int amount)
{ if ( amount >= 0 )
{ balance = amount; }
else { balance = 0; }
}
AccountManager AccountController
main(...) processTransactions()
BankReader
BankAccount
char readCommand()
boolean deposit(int amount)
int readAmount()
boolean withdraw(int amount)
showTransaction(String message,
int amount)
showTransaction(String message)
import javax.swing.*;
/** Lexon transakcione bankiere. */
public class BankReader
{ private String inputLine;
/** Konstruktori. */
public BankReader()
{ inputLine = ""; }
/** Lexon linjë të re komanduese.
* @param message - prompti për shfrytëzuesin
* @return karakterin e parë të komandës */
public char readCommand(String message)
{ inputLine
= JOptionPane.showInputDialog(message).trim().toUpperCase();
return inputLine.charAt(0);
}
import javax.swing.*;
import java.awt.*;
import java.text.*;
/** Shkruan transakcione bankiere. */
public class BankWriter extends JPanel
{
private int width = 300;
private int height = 200;
private BankAccount account;
private String lastTransaction = "";
/** Konstruktori.
* @param title - titulli i dritares grafike
* @param a - kontoja bankiere që afishohet */
public BankWriter(String title, BankAccount a)
{ account = a;
JFrame f = new JFrame();
f.getContentPane().add(this);
f.setTitle(title);
f.setSize(width, height);
f.setBackground(Color.white);
f.setVisible(true);
}
case ’T’ :
{ int amount = reader.readAmount();
boolean ok = account.withdraw(amount);
if ( ok )
{ writer.showTransaction("Tërheqje", amount); }
else { writer.showTransaction("Tërheqje jovalide"); }
break;
}
default :
{ writer.showTransaction("Komandë jovalide " + command); }
}
this.processTransactions();
}
}
}
Hyrjet, p.sh.:
Komanda (P,S,D,T,M): P
Komanda (P,S,D,T,M): d 50.50
Komanda (P,S,D,T,M): s
Komanda (P,S,D,T,M): D10.10
Komanda (P,S,D,T,M): p
Komanda (P,S,D,T,M): T 30.33
Komanda (P,S,D,T,M): m
AccountManager AccountController
main(...) processTransactions()
1 1
2
BankReader
BankAccount
char readCommand()
boolean deposit(int amount)
int readAmount()
2 boolean withdraw(int amount)
showTransaction(String message,
int amount)
showTransaction(String message)
/** Konstruktori
* @param r - input view objekti
* @param w1 - output view objekti i parë
* @param a1 - model objekti i parë
* @param w2 - output view objekti i dytë
* @param a2 - model objekti i dytë */
public AccountController2(BankReader r,
BankWriter w1, BankAccount a1,
BankWriter w2, BankAccount a2)
{ reader = r;
primaryWriter = w1;
primaryAccount = a1;
secondaryWriter = w2;
secondaryAccount = a2;
writer = primaryWriter;
account = primaryAccount;
}
case ’T’ :
{ int amount = reader.readAmount();
boolean ok = account.withdraw(amount);
if ( ok )
{ writer.showTransaction("Tërheqje", amount); }
else { writer.showTransaction("Tërheqje jovalide"); }
break;
}
case ’P’ :
{ this.resetAccount(primaryWriter, primaryAccount);
break;
}
case ’S’ :
{ this.resetAccount(secondaryWriter, secondaryAccount);
break;
}
default :
{ writer.showTransaction("Komandë jovalide " + command); }
}
this.processTransactions();
}
}
}