• Utvecklat på SUN Microsystems mitten 1990

Java
•
•
•
•
Utvecklat på SUN Microsystems mitten 1990-talet
Ursprungligen för Webprogram. Nu mycket spritt.
Massor med läroböcker.Vi använder Lewis&Loftus
http://java.sun.com/javase/6/docs/api/
Monday, November 2, 2009
Skillnader mellan
Python och Java
Viktigast: Java har statisk typning.
Alla variabler, metoder etc ska deklareras
och ges en fix typ. Typen får inte ändras
under programmets gång.
Python
Java
-
int a;
def siffersum(n)
int siffersum(int n)
Monday, November 2, 2009
En typ kan vara:
inbyggd typ
int boolean float char
namn på en klass
String
array av ovanstående
Monday, November 2, 2009
Ball
int[]
String[]
fallgropar
true och false med små bokstäver
char har enstaka tecken omslutn av ’
String har textsträngar omslutna av ”
Javas arrayer påminner om Matlabs, och är
mycket olika Pythons listor.
Pythons listor och dictionaries saknas helt i Java
Monday, November 2, 2009
Allt har en typ.
Typ ska anges:
Varje gång en variabel introduceras
För varje attribut till en klass
För varje metod: resultattyp och
parametrars typer
Monday, November 2, 2009
variabel/attribut:
Deklareras genom att skriva typens namn
följt av variabelns namn
int a;
Ball b;
Obs! semikolon avslutar alla
satser, liksom i Matlab
Får i samband med deklarationen
int a = 1;
float b = 2.53; ges ett initialvärde
Monday, November 2, 2009
Arraydeklarationer
int[] a;
a = new int[5];
a ska vara av typ array of int,
ännu inte bestämt hur lång
a blir ett arrayobjekt som tar 5 stycken
int, a[0]...a[4] (inledningsvis är
elementen odefinierade)
kombinerar ovanstående
int[] a = new int[5];
int [] a = {5,18,22,0,3};
int [] [] c;
Monday, November 2, 2009
Deklarerar, skapar och initierar i ett drag!
c är en tvådimensionell array. Elementet på
plats i,j noteras c[i][j]
Metoddeklaration
Resultattypen skrivs före metodnamnet.
För varje formell parameter skrivs dess typ
före parameterns namn.
Inget self !
Python:
def checkpos(self,ball,pos)
boolean checkpos(Ball ball, Position pos)
En metod som inte returnerar något får
void istället för en typ:
void runsimulation()
Monday, November 2, 2009
Allt i Java är klasser med sina metoder.
Det finns inget huvudprogram.
Det finns inga ”funktioner” - alla sådana
måste vara metoder till någon klass
Python
Java
def move(self, pos): void move(Position pos) {
<metodkropp>
<metodkropp>
}
...
...
Typdeklarera resultat och parametrar
Inget kolon
metodkroppen inom krullparanteser { }
Monday, November 2, 2009
Blockstruktur
Python
Java
Kommandon avslutas
med ny rad
Kommandon avslutas med
semikolon, ”;”
Block av kommandon
anges genom
indragning
Block av kommandon anges
genom att innesluta dem i
krullparanteser, ”{ ... }”
Viktiga inledningar av
block följs av kolon
Java använder inte kolon alls
Monday, November 2, 2009
Python
if a>b:
c = 0
a += 1
b = a
Monday, November 2, 2009
Java
if (a>b) {
c = 0;
a += 1;
}
b = a;
Indragningar och radbrott är betydelselösa
if (a>b) {
c = 0;
a += 1;
}
b = a;
if (a>b) {c
=0;
a += 1;}
b = a;
if (a>b) {
c = 0;
a += 1;
}
b = a;
Alla dessa är
samma!
if (a>b) {c=0;a += 1;}b = a;
Fortsätt att använda indragningar och
radbrott för att öka läsbarheten!
Monday, November 2, 2009
Statiskt scope
För varje deklaration är det väldefinierat
för vilket område av koden den gäller
Ex: Deklaration av en variabel har
räckvidden resten av det kodblocket, alltså
det som avgränsas av { }
.
if (a>b) {
int a;
Här inne kan a användas
.
.
}
Här ute kan a inte användas .
.
Monday, November 2, 2009
Tilldelning
Python
Java
a = 0
b = c/(d+1)
c += 2
a = 0;
b = c/(d+1);
c += 2;
I Java finns dessutom
a++;
kortform för
a+=1;
Monday, November 2, 2009
if
Python
Java
if a>b:
d = 2
elif a<b:
d = 1
e = 0
else:
d = 0
if (a>b)
d = 2;
else if (a<b) {
d = 1;
e = 0;
}
else
d = 0;
Paranteser runt villkor obligatoriska
elif heter else if
Inga kolon
Glöm inte semikolon efter kommandon
Monday, November 2, 2009
while
Python
Java
while a>b:
d = 2+a
a -= 1
while (a>b) {
d = 2+a;
a--;
}
Paranteser runt villkor obligatoriska
Inga kolon
Glöm inte krullparanteser om loopen
består av flera kommandon, och
semikolon efter kommandon
Monday, November 2, 2009
do
Python
Java
Finns inte
do {
d = 2+a;
a--;
}
while (a<b);
Som while, men kollar
loopvillkoret i slutet av
loopkroppen
Monday, November 2, 2009
while (villkor) {
loopkropp
}
loopvillkor
loopkropp
Monday, November 2, 2009
do {
loopkropp
}
while (villkor);
loopvillkor
loopkropp
for
Python
Java
for elem in balls:
.
.
for (elem:balls) {
.
.
}
for i in range(20):
.
.
Monday, November 2, 2009
for (i=0; i<20; i++) {
.
.
}
for i Java
for (initiering;
loopkropp
}
villkor; update) {
1. initiering görs en gång. Den innehåller
ofta deklaration av loopräknare
2. Så länge villkor är sant, gör loopkropp.
3. Efter varje gång loopkropp gjorts, gör
också update
Monday, November 2, 2009
for (initiering;
loopkropp
}
villkor; update) {
initiering
update
loopkropp
Monday, November 2, 2009
villkor
int sum = 0;
for (int i=0; i<10; i++) {
sum += i*i
}
Monday, November 2, 2009
Klassdeklaration
Python
Java
class Ball():
def __init__(self,x):
.
.
.
.
class Ball {
Ball(x) {
.
.
}
.
.
Inga paranteser eller kolon
}
Glöm inte krullparanteser!
Konstruktormetoden heter samma som
klassnamnet och ges aldrig någon typ.
Monday, November 2, 2009
Instansiering
Python
Java
theball = Ball(25)
theball = new Ball(25);
Det speciella ordet new signalerar att ett nytt
objekt ska konstrueras.
Att använda attribut och metoder sker exakt
likadant, med punktnotation.
Monday, November 2, 2009
import
Python
Java
import Tkinter
import javax.swing
from Tkinter import Frame
import javax.swing.JFrame
from Tkinter import *
import javax.swing.*
Inget from, utan använd punktnotation istället
Monday, November 2, 2009
Modifiers
Extra egenskaper kan anges i samband
med en deklaration. Skrivs före typen.
Monday, November 2, 2009
public
”Detta kan användas även utanför
den fil där deklarationen står”
static
”Detta förknippas med klassen
och inte med klassens objekt”
final
”Detta är en konstant som
inte får tilldelas nytt värde”
final int SIZE = 600;
public static float arcsin(float x) { ..
Monday, November 2, 2009
Output
Python
Java
print ”Hej”
System.out.println (”Hej”);
finns också: System.out.print()
(utan radbyte)
Monday, November 2, 2009
Input
import java.util.Scanner;
Scanner scan = new Scanner(System.in);
Python:
a = scan.nextLine();
a = raw_input()
i = scan.nextInt();
i = input()
Monday, November 2, 2009
Ett fullständigt program
Fil Prog:
public class Prog...
class klass1...
En serie klassdefinitioner
varav precis en är public.
Denna kallas programmets
huvudklass och måste ha
samma namn som filen den
ligger i.
class klass2...
Obs! inget huvudprogram
som i Python
Monday, November 2, 2009
main
När ett program körs börjar det alltid med
metoden main() i huvudklassen. Huvudklassen
måste alltså ha en sådan metod.
För main() gäller:
Den ska kunna anropas utifrån, dvs vara public
Den ska höra till själva huvudklassen och inte till
något av dess objekt, dvs vara static
Den ska inte returnera något värde, dvs i stället
för resultattyp har den void.
Den ska som parameter ha en array av String
Monday, November 2, 2009
public class MyMainProg {
public static void main(String[] args) {
Det som står här kommer att köras
när MyMainProg körs
}
}
Monday, November 2, 2009
Exempel
//********************************************************************
// GasMileage.java
Author: Lewis/Loftus
//
// Demonstrates the use of the Scanner class to read numeric data.
//********************************************************************
import java.util.Scanner;
public class GasMileage
{
//----------------------------------------------------------------// Calculates fuel efficiency based on values entered by the
// user.
//----------------------------------------------------------------public static void main (String[] args)
{
int miles;
double gallons, mpg;
Scanner scan = new Scanner (System.in);
Python:
System.out.print ("Enter the number of miles: ");
miles = scan.nextInt();
miles = input(”Enter the number of miles”)
System.out.print ("Enter the gallons of fuel used: ");
gallons = scan.nextDouble();
gallons = input(”Enter the gallons of fuel used”)
mpg = miles / gallons;
mpg = miles / gallons
System.out.println ("Miles Per Gallon: " + mpg);
print ”Miles Per Gallon”, mpg
}
}
Monday, November 2, 2009
import java.text.DecimalFormat;
import java.util.Scanner;
public class Average
{
//----------------------------------------------------------------// Computes the average of a set of values entered by the user.
// The running sum is printed as the numbers are entered.
//----------------------------------------------------------------public static void main (String[] args)
{
sum = count = 0
int sum = 0, value, count = 0;
double average;
Scanner scan = new Scanner (System.in);
System.out.print ("Enter an integer (0 to quit): ");
value = scan.nextInt();
while (value != 0)
{
count++;
value = input (”Enter an integer (0) to quit”)
// sentinel value of 0 to terminate loop
while value != 0:
count += 1
sum += value
print ”The sum so far is”, sum
sum += value;
System.out.println ("The sum so far is " + sum);
System.out.print ("Enter an integer (0 to quit): ");
value = scan.nextInt();
value = input (”Enter an integer..”)
}
System.out.println ();
if (count == 0)
System.out.println ("No values were entered.");
if count == 0:
print ”No values were entered”)
Monday, November 2, 2009
}
}
else
{
average = (double)sum / count;
System.out.println ("The average is "
+ average);
}
else:
average = float(sum) / count
print ”The average is”, average
import java.util.Scanner;
public class PalindromeTester
{
//----------------------------------------------------------------// Tests strings to see if they are palindromes.
//----------------------------------------------------------------public static void main (String[] args)
{
another = ”y”
String str, another = "y";
int left, right;
Scanner scan = new Scanner (System.in);
while (another.equalsIgnoreCase("y")) // allows y or Y
{
System.out.println ("Enter a potential palindrome:");
str = scan.nextLine();
while another == ”y” or another == ”Y”:
str = raw_input(”Enter a potential palindrome”)
left = 0;
right = str.length() - 1;
left = 0
right = len(str)-1
while (str.charAt(left) == str.charAt(right)
&& left < right)
{
left++;
right--;
}
while str[left] == str[right] and left < right:
left += 1
right -= 1
System.out.println();
if (left < right)
System.out.println ("That string is NOT a palindrome.");
else
System.out.println ("That string IS a palindrome.");
if left < right:
print ”That string is NOT a palindrome”
else:
print ”That string IS a palindrome”
System.out.println();
System.out.print ("Test another palindrome (y/n)? ");
another = scan.nextLine();
another = raw_input(”Test another palindrome (y/n?”
}
}
}
Monday, November 2, 2009
NetBeans
http://www.netbeans.org/
Monday, November 2, 2009
Inför labben
•
•
•
Ny partner, som alltid
Läs L&L 2.1 – 2.6, 3.1-3.6, 5.1-5.8, 7.1-7.2
Provkör netbeans med något enkelt, tex
http://testwww.netbeans.org/kb/docs/java/quickstart.html
Monday, November 2, 2009