venerdì 13 giugno 2014

Programmazione: Capitolo, 6, Parte 2

Errori comuni: punto e virgola
§ Punto e virgola nella posizione sbagliata
sum = 0;
for (i = 1; i <= 10; i++);
sum = sum + i;
System.out.println(sum);

§ Punto e virgola mancante
for (years = 1;
(balance = balance + balance * rate / 100) <
targetBalance;
years++)
System.out.println(years);

Cicli annidati
§ I cicli possono essere annidati. Un esempio tipico di ciclo annidato è
quello che visualizza tabelle con righe e colonne.
§ Creare una forma triangolare
[]
[][]
[][][]
[][][][]

§ Stampare un certo numero di righe
[]
[][]
[][][]
[][][][]
for (int i = 1; i <= n; i++)
{
// costruisci una riga del triangolo
...
}

Cicli annidati
§ Usare un altro ciclo per mettere insieme le parentesi quadre [ ]
per la riga

for (int j = 1; j <= i; j++)
r = r + "[]";
r = r + "\n";

§ Se si mettono assieme entrambi i cicli si ottengono due cicli annidati
for (int j = 1; j <= i; j++)
r = r + "[]";
r = r + "\n";
String r = " ";
for (int i = 1; i <= width; i++)
{
// costruisci una riga del triangolo
for (int j = 1; j <= i; j++)
r = r + “[]”;
r = r + “\n”;
}
return r;
File Triangle.java
01: /**
02: Questa classe descrive oggetti triangolari che possono
03: essere visualizzati in questo modo:
04: []
05: [][]
06: [][][]
07: */
08: public class Triangle
09: {
10: /**
11: Construisce un triangolo.
12: @param aWidth il numero di [] nell'ultima riga
del triangolo.
13: */
14: public Triangle(int aWidth)
15: {
16: width = aWidth;
17: }
18:
19: /**
20: Calcola una stringa che rappresenta il triangolo.
21: @return una stringa composta di caratteri []
e ritorni a capo
22: */
23: public String toString()
24: {
25: String r = "";
26: for (int i = 1; i <= width; i++)
27: {
28: // costruisci una riga del triangolo
29: for (int j = 1; j <= i; j++)
30: r = r + "[]";
31: r = r + "\n";
32: }
33: return r;
34: }
35:
36: private int width;
37: }

File TriangleRunner.java
01: /**
02: Questo programma visualizza due triangoli.
03: */
04: public class TriangleRunner
05: {
06: public static void main(String[] args)
07: {
08: Triangle small = new Triangle(3);
09: System.out.println(small.toString());
10:
11: Triangle large = new Triangle(15);
12: System.out.println(large.toString());
13: }
14: }
Visualizza
[]
[][]
[][][]
[]
[][]
[][][]
[][][][]
[][][][][]
[][][][][][]
[][][][][][][]
[][][][][][][][]
[][][][][][][][][]
[][][][][][][][][][]
[][][][][][][][][][][]
[][][][][][][][][][][][]
[][][][][][][][][][][][][]
[][][][][][][][][][][][][][]
[][][][][][][][][][][][][][][]

Utilizzo di valori sentinella
§ Metodo molto utilizzato per segnalare la fine di un insieme di dati
§ Non è una buona idea scegliere 0 oppure -1 come sentinelle: questi
valori possono essere validi come dati del problema. E’ meglio
utilizzare la lettera Q.
System.out.print("Enter value, Q to quit: ");
String input = in.next();
if (input.equalsIgnoreCase("Q"))
Abbiamo finito
else
{
double x = Double.parseDouble(input);
. . .
}
Ciclo e mezzo
§ A volte la condizione di terminazione di un ciclo può essere valutata
soltanto nel mezzo di un ciclo, che può essere controllato mediante
una variabile booleana.
boolean done = false;
while (!done)
{
Visualizza una richiesta di dati
String input = leggi un dato
if (i dati sono terminati)
done = true;
else
{
// elabora il dato letto
}
}

File DataAnalyzer.java
01: import java.util.Scanner;
02:
03: /**
04: Questo programma calcola il valore medio e il valore massimo
05: di un insieme di dati forniti in ingresso.
06: */
07: public class DataAnalyzer
08: {
09: public static void main(String[] args)
10: {
11: Scanner in = new Scanner(System.in);
12: DataSet data = new DataSet();
13:
14: boolean done = false;
15: while (!done)
16: {
17: System.out.print("Enter value, Q to quit: ");
18: String input = in.next();
19: if (input.equalsIgnoreCase("Q"))
20: done = true;
21: else
22: {
23: double x = Double.parseDouble(input);
24: data.add(x);
25: }
26: }
27:
28: System.out.println("Average = " + data.getAverage());
29: System.out.println("Maximum = " + data.getMaximum());
30: }
31: }
File DataSet.java
01: /**
02: Calcola informazioni relative a un insieme di dati.
03: */
04: public class DataSet
05: {
06: /**
07: Costruisce un insieme di dati vuoto.
08: */
09: public DataSet()
10: {
11: sum = 0;
12: count = 0;
13: maximum = 0;
14: }
15:
16: /**
17: Aggiunge un valore all'insieme dei dati
18: @param x un valore
19: *
20: public void add(double x)
21: {
22: sum = sum + x;
23: if (count == 0 || maximum < x) maximum = x;
24: count++;
25: }
26:
27: /**
28: Restituisce la media dei valori inseriti.
29: @return la media, o 0 se non ci sono dati
30: */
31: public double getAverage()
32: {
33: if (count == 0) return 0;
34: else return sum / count;
35: }
36:
37: /**
38: Restituisce il valore massimo tra i valori inseriti.
39: @return il massimo, o 0 se non ci sono dati
40: */
41: public double getMaximum()
42: {
43: return maximum;
44: }
45:
46: private double sum;
47: private double maximum;
48:
Visualizza
Enter value, Q to quit: 10
Enter value, Q to quit: 0
Enter value, Q to quit: -1
Enter value, Q to quit: Q
Average = 3.0
Maximum = 10.0


 Numeri casuali e simulazioni
§ In una simulazione si generano ripetutamente numeri casuali,
usandoli per simulare una determinata attività.
§ Generatore di numeri casuali
Random generator = new Random();
int n = generator.nextInt(a); // 0 <= n < a
double x = generator.nextDouble(); // 0 <= x < 1
§ Lancio del dado (numero casuale tra 1 e 6)
Random generator = new Random();
int n = generator.nextInt(a); // 0 <= n < a
double x = generator.nextDouble(); // 0 <= x < 1
int d = 1 + generator.nextInt(6);


File Die.java
01: import java.util.Random;
02:
03: /**
04: Questa classe costituisce un modello di un dado, che,
05: quando viene lanciato, atterra su una faccia scelta a caso.
06: */
07: public class Die
08: {
09: /**
10: Costruisce un dado con un dato numero di facce.
11: @param s il numero di facce, 6 in un dado normale
12: */
13: public Die(int s)
14: {
15: sides = s;
16: generator = new Random();
17: }
18:

19: /**
20: Simula un lancio del dado
21: @return la faccia del dado
22: */
23: public int cast()
24: {
25: return 1 + generator.nextInt(sides);
26: }
27:
28: private Random generator;
29: private int sides;
30: }
File DieSimulator.java
01: /**
02: Questo programma simula il lancio di un dado per 10 volte
03: */
04: public class DieSimulator
05: {
06: public static void main(String[] args)
07: {
08: Die d = new Die(6);
09: final int TRIES = 10;
10: for (int i = 1; i <= TRIES; i++)
11: {
12: int n = d.cast();
13: System.out.print(n + " ");
14: }
15: System.out.println();
16: }
17: }

Visualizza

6 5 6 3 2 6 3 4 4 1


Visualizza (alla seconda esecuzione)


3 2 2 1 6 5 3 4 1 2

Nessun commento:

Posta un commento