dursino
03-02-2010, 11:59
Salve ragazzi, dato questo testo:
Definire in Java quanto richiesto (scrivere nel file Esa.java, tradurre, collegare ed eseguire utilizzando i
comandi indicati nelle avvertenze).
Il file contiene 1) una classe Giro che estende Threads, con costruttore Giro(int cicli, String parola).
Ogni thread di classe Giro possiede un riferimento next a un altro thread di classe Giro, impostato
tramite il metodo setNext(Giro next). Il thread deve, per cicli volte, sospendersi in attesa di una
interruzione, al risveglio scrivere su video la stringa parola, quindi inviare una interruzione al thread
next. 2) Una classe Esa con un metodo fai(int cicli, String[] parole) che deve creare n thread Giro,
dove n è la dimensione dell'array parole, passando a ciascuno cicli e una parola diversa dall'array
parole, in sequenza. Gli n thread devono essere organizzati in una lista circolare (l'ultimo thread punta
al primo). Infine, il metodo avvia tutti i thread e manda una interruzione al primo.
Questa è la mia soluzione:
class Giro extends Thread
{
private Giro next;
private int cicli;
private String Parola;
public Giro(int cicli,String Parola)
{
this.cicli=cicli;
this.Parola=Parola;
}
public void setNext(Giro Next)
{ this.next=next;
}
public synchronized void aspetta() {
try {
while (!isInterrupted())
wait();
} catch(InterruptedException e) {}
}
public void vai() {
interrupt();
}
public void run()
{
for (int i=0;i<cicli;i++)
{
aspetta();
System.out.println(Parola);
next.vai();
}
}
}
class Esa
{
void fai(int cicli,String[] Parole)
{
int n=Parole.length;
if (n==0) return;
Giro[] a=new Giro[n];
for (int i=0;i<n;i++)
{
a[i]=new Giro (cicli,Parole[i]);
}
for (int i=0;i<n;i++)
{
a[i].setNext(a[(i + 1) % n]);
a[i].start();
}
a[0].vai();
}
}
E questo è il main dato dal prof,quindi di regola privo di errori:
class Pesa {
public static void main(String[] args) {
String[] parole = { "primo", "secondo", "terzo" };
Esa esa = new Esa();
esa.fai(3, parole);
}
}
Il mio codice da un errore di NullPointerException, potete spiegarmi cosa non va?
E cosa Corregereste in generale del mio listato?
Grazie mille davvero
Definire in Java quanto richiesto (scrivere nel file Esa.java, tradurre, collegare ed eseguire utilizzando i
comandi indicati nelle avvertenze).
Il file contiene 1) una classe Giro che estende Threads, con costruttore Giro(int cicli, String parola).
Ogni thread di classe Giro possiede un riferimento next a un altro thread di classe Giro, impostato
tramite il metodo setNext(Giro next). Il thread deve, per cicli volte, sospendersi in attesa di una
interruzione, al risveglio scrivere su video la stringa parola, quindi inviare una interruzione al thread
next. 2) Una classe Esa con un metodo fai(int cicli, String[] parole) che deve creare n thread Giro,
dove n è la dimensione dell'array parole, passando a ciascuno cicli e una parola diversa dall'array
parole, in sequenza. Gli n thread devono essere organizzati in una lista circolare (l'ultimo thread punta
al primo). Infine, il metodo avvia tutti i thread e manda una interruzione al primo.
Questa è la mia soluzione:
class Giro extends Thread
{
private Giro next;
private int cicli;
private String Parola;
public Giro(int cicli,String Parola)
{
this.cicli=cicli;
this.Parola=Parola;
}
public void setNext(Giro Next)
{ this.next=next;
}
public synchronized void aspetta() {
try {
while (!isInterrupted())
wait();
} catch(InterruptedException e) {}
}
public void vai() {
interrupt();
}
public void run()
{
for (int i=0;i<cicli;i++)
{
aspetta();
System.out.println(Parola);
next.vai();
}
}
}
class Esa
{
void fai(int cicli,String[] Parole)
{
int n=Parole.length;
if (n==0) return;
Giro[] a=new Giro[n];
for (int i=0;i<n;i++)
{
a[i]=new Giro (cicli,Parole[i]);
}
for (int i=0;i<n;i++)
{
a[i].setNext(a[(i + 1) % n]);
a[i].start();
}
a[0].vai();
}
}
E questo è il main dato dal prof,quindi di regola privo di errori:
class Pesa {
public static void main(String[] args) {
String[] parole = { "primo", "secondo", "terzo" };
Esa esa = new Esa();
esa.fai(3, parole);
}
}
Il mio codice da un errore di NullPointerException, potete spiegarmi cosa non va?
E cosa Corregereste in generale del mio listato?
Grazie mille davvero