• Non ci sono risultati.

Input/Output, Eccezioni

N/A
N/A
Protected

Academic year: 2022

Condividi "Input/Output, Eccezioni"

Copied!
9
0
0

Testo completo

(1)

Fac.ScienzeUniversidi Trento

Input/Output, Eccezioni

2

Fac.ScienzeUniversidi Trento

Programmazione 2 - Marco Ronchetti

Lettura di stringhe

import java.io.*;

public class A { public A() {

BufferedReader s = new BufferedReader(

new InputStreamReader(System.in));

try {

System.out.println("Dammi una stringa");

String str=s.readLine();

System.out.println("Hai scritto "+str);

}catch (IOException e) {e.printStackTrace();

} }

public static void main(String [] ar) { A a=new A();

} }

Dammi una stringa abracadabra

Hai scritto abracadabra

(2)

3

Fac.ScienzeUniversidi Trento

Programmazione 2 - Marco Ronchetti

Lettura di int

public A() { int i=0;

BufferedReader s = new BufferedReader(

new InputStreamReader(System.in));

try {

System.out.println("Dammi un intero");

i=Integer.parseInt(s.readLine());

System.out.println("Hai scritto "+i);

}catch (Exception e) {e.printStackTrace();}

}

Dammi un intero 2

Hai scritto 2

4

Fac.ScienzeUniversidi Trento

Programmazione 2 - Marco Ronchetti

Lettura di int

public A() { int i=0;

BufferedReader s = new BufferedReader(

new InputStreamReader(System.in));

try {

System.out.println("Dammi un intero");

i=Integer.parseInt(s.readLine());

System.out.println("Hai scritto "+i);

}catch (IOException e) {e.printStackTrace();}

}

Dammi un intero pippo

java.lang.NumberFormatException: For input string: "gh"

at

java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) at java.lang.Integer.parseInt(Integer.java:426)

at java.lang.Integer.valueOf(Integer.java:532) at pila.A.<init>(A.java:11)

(3)

Fac.ScienzeUniversidi Trento

Lettura di float

float f=0; boolean error;

BufferedReader s = new BufferedReader(

new InputStreamReader(System.in));

try { do {

System.out.println("Dammi un float");

try{

error=false;

f=Float.parseFloat(s.readLine());

} catch (NumberFormatException e) { error=true;

System.out.println("Input non valido");

}

} while (error);

System.out.println("Hai scritto "+f);

}catch (IOException e) {e.printStackTrace();}

}

Input non valido Dammi un float 3

Hai scritto 3.0

6

Fac.ScienzeUniversidi Trento

Programmazione 2 - Marco Ronchetti

Lettura di stringhe con GUI

import javax.swing.JOptionPane;

public A() { ...

String input = JOptionPane.showInputDialog(

"How are you?");

System.out.println(input);

System.exit(1);

}

Essenziale!

Altrimenti la thread che gestisce la GUI rimane viva, e

il processo non termina

(4)

7

Fac.ScienzeUniversidi Trento

Programmazione 2 - Marco Ronchetti

Ancora Ereditarietà

8

Fac.ScienzeUniversidi Trento

Programmazione 2 - Marco Ronchetti

Erediterietà

La estensioni possono essere:

STRUTTURALI

(aggiunta di varabili di istanza) e/o

COMPORTAMENTALI (aggiunta di nuovi metodi

e/o

modifica di metodi esistenti)

(5)

Fac.ScienzeUniversidi Trento

Unified Modeling Language

class C {…}

class B extends C {…}

Esiste una notazione grafica per mostrare le relazioni di ereditarietà.

Object

String C

B

Tutte le classi ereditano da Object!

10

Fac.ScienzeUniversidi Trento

Programmazione 2 - Marco Ronchetti

subclassing & overriding

public class Point { public int x=0;

public int y=0;

Point(int x,int y){

this.x=x;

this.y=y;

}

public String toString(){

return "("+x+","+y+")";

}

public static void main(String a[]){

Point p=new Point(5,3);

System.out.println(p);

} }

Output:

(5,3)

(6)

11

Fac.ScienzeUniversidi Trento

Programmazione 2 - Marco Ronchetti

subclassing & overriding

public class NamedPoint extends Point { String name;

public NamedPoint(int x,int y,String name) { super(x,y); //prima istruzione!

this.name=name;

}

public String toString(){ //Overriding return name+" ("+x+","+y+")";

}

public static void main(String a[]){

NamedPoint p=new NamedPoint(5,3,“A");

System.out.println(p);

} }

Output:

A (5,3)

12

Fac.ScienzeUniversidi Trento

Programmazione 2 - Marco Ronchetti

subclassing & overriding

public class NamedPoint extends Point { String name;

public NamedPoint(int x,int y,String name) { super(x,y); //prima istruzione!

this.name=name;

}

public String toString(){ //Overriding return name+super.toString();

}

public static void main(String a[]){

NamedPoint p=new NamedPoint(5,3,“A");

System.out.println(p);

} }

Output:

A (5,3)

(7)

Fac.ScienzeUniversidi Trento

Esercizio

a) Scrivere un metodo move(int dx, int dy) in Point.

Point

NamedPoint Point3D

b) Estendere Point a Point3d aggiungendo una coordinata z, e fornendo un metodo move(int dx, int

dy int dz) in Point3D.

14

Fac.ScienzeUniversidi Trento

Programmazione 2 - Marco Ronchetti

Problemi con l’ereditarietà

?

Point

NamedPoint Point3D

NamedPoint3D

(8)

15

Fac.ScienzeUniversidi Trento

Programmazione 2 - Marco Ronchetti

Classi imparentate…

Point

NamedPoint

public static void main(String a[]){

Point p=new Point(2,2);

NamedPoint n=new NamedPoint(3,3,”A”);

Point q=new NamedPoint(3,3,”A”);

NamedPoint z=new Point(2,2);

z.getName();

}

Point Int x, int y NamedPoint

String name

16

Fac.ScienzeUniversidi Trento

Programmazione 2 - Marco Ronchetti

Decisioni al volo…

Pila

Coda

public static void main(String a[]){

Pila p;

// leggi k

if (k==1) p=new Pila();

else p=new Coda();

p.inserisci(1);

p.inserisci(2);

p.estrai();

}

Il vero tipo della variabile p viene deciso A RUNTIME!

(dynamic binding).

(9)

Fac.ScienzeUniversidi Trento

Decisioni al volo…

Il C++ offre al programmatore complessi meccanismi per decidere se usare dynamic binding

(decisione del tipo a runtime) o static binding (decisione del tipo a compile time).

In Java le decisioni sono sempre fatte a runtime, salvo quando ci sono le condizioni per decidere automaticamente

a compile time

18

Fac.ScienzeUniversidi Trento

Programmazione 2 - Marco Ronchetti

Determinazione del tipo

Pila

Coda

public static void main(String a[]){

Coda p=new Coda();

System.out.println(p instanceof Coda);

System.out.println(p instanceof Pila);

}

Il vero tipo della variabile p viene deciso A RUNTIME!

(dynamic binding).

true

true

Riferimenti

Documenti correlati

whose name is distinct from all other existing files, and opens the file for binary writing and reading (as if the mode string &#34;wb+&#34; were used in an fopen() call). If

ƒ restituisce un puntatore che contiene l’indirizzo del blocco di memoria allocato, cioè della variabile, la quale sarà quindi accessibile dereferenziando il puntatore. ƒ la

Definiremo la nozione di ma- trice inversa A −1 di una matrice A, proveremo che la matrice A possiede inversa se e solo se A e’ non singolare, e vedremo come in questo caso

• FileOutputStream implementa questi metodi nel caso parti- colare in cui l’output è un file, il cui nome è passato al costrut- tore di FileOutputStream ; in alternativa si

This example assumes that TESTFILE is a file with a few lines of data written to it using the Write # statement; that is, each line contains a string in quotations and a

¨  Se la stringa di formato contiene un white space, la scanf legge zero o più white space, che verranno scartati, fino al primo carattere non white space.

o implementare una funzione virtuale nella classe base implementata nelle classi derivate (con output). o implementare una funzione virtuale nella classe base non implementata

 An efficient means of transferring data directly between I/O and memory for large data transfers since programmed I/O is suitable only for slow devices and individual