(Java) problemi con iteratori

  • 13 Risposte
  • 7831 Visite

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline aduri

  • Nuovo Iscritto
  • *
  • 18
(Java) problemi con iteratori
« il: 03 Ottobre 2006, 19:59 »
Salve a tutti,
sono qua a chiedere aiuto per la soluzione di questo questo che e' l'ultimo esercizio di preparazione per
l'esame di java.
Premetto che il punto 1 e il 2 penso di averlo gia' implementato.

Il testo originale del prof. e' il seguente:

1. Definire la classe SortedLinkedList che estende la classe LinkedList e che mantiene ordinata la lista:
ridefinire il metodo add() affinché inserisca gli elementi in ordine.
Gli oggetti da inserire devono essere confrontabili e quindi devono implementare l’interfaccia Comparable.
Si ordini la lista in modo che il valore massimo sia in testa (first) e il valore minimo in coda (last).
Verificare la correttezza dell’implementazione: per esempio usando sequenze di stringhe in ordine, in ordine inverso,
casuali, uguali. Verificare con sequenze di 21 elementi Integer casuali, con valori compresi nell’intervallo [-30,30].

2. Sviluppare una classe Process che descriva un processo. Definire tre campi: un intero che
identifica il processo (pid), una stringa per il nome del processo e un intero per
l’occupazione di memoria. Definire il costruttore della classe e il metodo toString().
Implementare l’interfaccia Comparable: il confronto è fatto sulla memoria utilizzata.

3. Scrivere una classe (che contiene il main()) in cui creare un oggetto di tipo
SortedLinkedList, lista di oggetti Process. La sequenza di processi -in ingresso al sistema- è contenuta nel
file processes.txt: ogni riga contiene i dati di un processo, cioè il pid, il nome e la memoria occupata.
Eseguire le seguenti operazioni:
- Leggere una riga del file ed inserire il processo nella lista.
- Se la quantità di memoria utilizzata da tutti i processi supera un valore di soglia
(100000) eliminare dalla lista il processo che in quel momento occupa più memoria
(utilizzare gli iteratori, oggetti Iterator).
- Salvare su file il numero di processi presenti nel sistema e la quantità di memoria
utilizzata da tutti i processi in ogni istante (-ad ogni lettura di una riga-).
Fare i grafici dell’occupazione di memoria e del numero di processi (in ogni istante).
Commentare.
Valutare il costo computazionale per mantenere la lista ordinata e per eliminare il processo che occupa più memoria.

per chiarezza allego anche la classe SortedLinkedList:

Codice: [Seleziona]
import java.util.*;
public class SortedLinkedList extends LinkedList
{
private static int elementi;
public static void main ( String []args )
    {
       if(args.length > 0)
          elementi = Integer.parseInt(args[0]);
       else
         elementi = 21;
         System.out.println( "Prova su " + elementi + "elementi." );
         SortedLinkedList l = new SortedLinkedList();
         // riempi la lista di numeri a caso tra -30 e +30
          ListIterator it_aggiunta = l.listIterator();
   Random generatore=new Random();
       for ( int i = 0; i < elementi; i++ )
       {
   int segno=generatore.nextInt(2);// 0 o 1
   int n=generatore.nextInt(31);
   if(segno==0)
   l.add(new Integer(- n ));
   else
   l.add(new Integer(n));
       }
       // stampa tutti i valori
       System.out.println( "Collezione completa:" );
       stampaCollezione( l );
       }
    private static void stampaCollezione
                                   ( Collection c )
    {
       Iterator i = c.iterator();
       while ( i.hasNext() )
       {
          System.out.println( i.next() );
       }
    }
    @Override
 public boolean add(Object o){
  Comparable c=(Comparable)o;//bisogna usare il cast a Comparable
  ListIterator it=listIterator();
  Comparable c2=null;
  if(it.hasNext())
   c2=(Comparable)it.next();
  else{
   it.add(c);
   return true;
  }
  while(it.hasNext() && c2.compareTo(c)>0) //<0 x ordine crescente
     c2=(Comparable)it.next();
  //uscito dal while ho raggiunto la posizione di inserimento perchè il compareTo() non da più <0
  //ora posso usare per inserire in questa posizione il metodo add di ListIterator ma bisognerebbe
  //tornare indietro di una posizione per essere sicuri che l'inserimento sia in ordine se il compareTo() >0
  if(c2.compareTo(c)<0)//>0 x ordine crescente
  it.previous();
  it.add(c);
  return true;
 }
}


Questa e' la classe Processo con la classe EsProcesso col main


Codice: [Seleziona]
import java.util.*;
import java.lang.*;
import java.io.*;
import javax.swing.JOptionPane;//utility pannello di dialogo
class Processo implements Comparable{
 private int pid;
 private String name;
 private int memoria;
 public Processo(int pid,String name,int mem){
  this.pid=pid;
  this.name=name;
  memoria=mem;
 }
 public int compareTo(Object o){
  Processo p=(Processo)o;
  return this.memoria-p.memoria;//ordina in base alla quantità di memoria in ordine crescente
 }
 public String toString(){
  return ""+pid+" "+name+" "+memoria;
 }

 public int GetMemoria(){
   return this.memoria;
}
 public void RemoveMaggiore(){
 SortedLinkedList lista=new SortedLinkedList();
 Iterator it1=lista.iterator();// in questa riga ho creato un nuovo
 //l'oggetto iterator it1 che agisce sull'oggetto list di sortedlinkedlist (idem come sopra)
    Processo p = (Processo) it1.next(); // ottengo il processo
   memoria -= p.memoria;   // aggiorno la memoria occupata
   // rimuovo il processo dalla lista
}


 }

 public class EsProcesso{
 public static void main(String[] args) throws IOException
 {
  //String nomeFile=JOptionPane.showInputDialog("Digita il nome del file da leggere");
//altro modo di input file diretto da codice
String nomeFile="processes.txt";
BufferedReader fileLettura=null;
SortedLinkedList lista=new SortedLinkedList();
try {
 try{
  fileLettura = new BufferedReader(new FileReader(nomeFile));
  String linea=fileLettura.readLine();
  while(linea!=null) {
   String[] tmp=linea.split("\t");
   Processo p=new Processo(Integer.parseInt(tmp[0]),tmp[1],Integer.parseInt(tmp[2]));
   lista.add( p);
   linea=fileLettura.readLine();//per far girare il ciclo
  }
 }finally{ fileLettura.close();}
}catch(FileNotFoundException e) {// gestisco le eccezioni
  System.out.println("Il file "+nomeFile + " non esiste o non puo' essere aperto");
}catch(IOException e) {
  System.out.println("errore di lettura "+e);
}
Iterator it=lista.iterator();
while(it.hasNext())
 System.out.println((Processo)it.next());//cosi puoi vedere tutta la lista
// e stampare a video
}
Processo p1= new Processo();// creo nuovo oggetto Processo

// sembra che richieda di implementare il costruttore dell'oggetto
// ma non e' gia' istanziato come public nella classe processo?
// sembra che non riconosca i 2 metodi seguenti

while(p1.GetMemoria()>100000){ //che dovrebbe incrementare il metodo GetMemoria()
   // rimuovi il processo che occupa più memoria
    p1.RemoveMaggiore();    //che dovrebbe incrementare il metodo RemoveMaggiore()
}
}



Questo e' uno stralcio del file di testo processes.txt

1 init 272
2 migratio 0
3 ksoftirq 0
4 watchdog 0
5 migratio 0
6 ksoftirq 0
7 watchdog 0
8 events/0 0
9 events/1 0
10 khelper 0
11 kthread 0
14 kacpid 0
104 kblockd/ 0
105 kblockd/ 0
108 khubd 0
162 pdflush 0
163 pdflush 0
165 aio/0 0
164 kswapd0 0
166 aio/1 0
259 kseriod 0
417 ata/0 0
418 ata/1 0
424 scsi_eh_ 0
425 scsi_eh_ 0
446 kjournal 0
999 udevd 240

Offline Max

  • Ex-Staff
  • Membro Anziano
  • *****
  • 363
  • Sesso: Maschio
    • http://www.massimostellin.it
Re: (Java) problemi con iteratori
« Risposta #1 il: 04 Ottobre 2006, 09:30 »
nella classe processo hai implementato il contruttore che richiede tre argomenti in ingresso, poi tu nel main instanzi la classe con un contruttore senza argomenti d'ingresso.
Per questo il compilatore non ti può instanziare la classe e non creando il puntatore a quella classe non può richiamare i metodi all'interno.

Vai nella classe Processo e crea un altro costruttore sfruttando l'overloading che non accetta nessun parametro in ingresso. 

Offline Max

  • Ex-Staff
  • Membro Anziano
  • *****
  • 363
  • Sesso: Maschio
    • http://www.massimostellin.it
Re: (Java) problemi con iteratori
« Risposta #2 il: 04 Ottobre 2006, 10:06 »
cmq non capisco come hai implementato la classe EsProcesso.

{supponendo che la classe SortedLinkedList e Processo siano giuste}
All'inizio gustamente leggi il file txt, lo parsi e lo inserisci nella lista.
Poi stampi a video la lista (tutto ok);
poi crei un oggetto processo vuoto (a cosa serve?)
{supponendo che ci sia nella classe Processo il contruttore per instanziare un oggetto che tutti i valori impostati a 0 o nulli}
apri un ciclo facendolo girare solo se il processo appena creato (vuoto) abbia la variabile memoria maggiore di 10000 (qua bastava un if, comunque lì dentro non ci entrerai mai visto che l'oggetto è vuoto) e lanci il metodo dell'oggetto processo che rimuove il processo maggiore su di una lista vuota creata all'interno del metodo RemoveMaggiore.
« Ultima modifica: 04 Ottobre 2006, 10:11 da Max »

Offline aduri

  • Nuovo Iscritto
  • *
  • 18
Re: (Java) problemi con iteratori
« Risposta #3 il: 08 Ottobre 2006, 17:34 »
Max hai la pazienza di darci ancora un'occhiata? :'(
Ho fatto (almeno penso) l'overload del costruttore della classe processo senza parametri.
Poi ho fatto un po' di modfiche ma non trova i metodi come getmemoria() che dovrebbe agire sulla lista.

Riguardo l'errore non vede il metodo GetMemoria() legato alla lista; allego il log (io uso Jcreator):

C:\Documents and Settings\aduri\Desktop\SW Java ok\esame\EsProcesso.java:79: cannot find symbol
symbol  : method GetMemoria()
location: class SortedLinkedList
if(lista.GetMemoria()>100000){
        ^
C:\Documents and Settings\aduri\Desktop\SW Java ok\esame\EsProcesso.java:82: cannot find symbol
symbol  : method RemoveMaggiore()
location: class SortedLinkedList
    lista.RemoveMaggiore();
         ^
2 errors

Process completed.



allego il nuovo codice indentato

Codice: [Seleziona]
import java.util.*;
import java.lang.*;
import java.io.*;
import javax.swing.JOptionPane;//utility pannello di dialogo
class Processo implements Comparable{
 private int pid;
 private String name;
 private int memoria;
 
  public Processo() { //costruttore senza parametri d'ingresso
  this.pid=0;
  this.name=null;
  memoria=0;
    }
  public Processo(int pid,String name,int mem){ // costruttore con parametri
  this.pid=pid;
  this.name=name;
  memoria=mem;
  }

  public int compareTo(Object o){
  Processo p=(Processo)o;
  return this.memoria-p.memoria;//ordina in base alla quantità di memoria in ordine crescente
  }
 
  public int GetMemoria(){
  SortedLinkedList lista=new SortedLinkedList();// l'avevo gia' creato nel main
              // nella classe Processo compila ma mi sembra una assurdita'
   return this.memoria;
}

 public void RemoveMaggiore(){
     SortedLinkedList lista=new SortedLinkedList();// l'avevo gia' creato nel main creandolo anche         
     Iterator it_remove=lista.iterator();// in questa riga ho creato
          //l'oggetto iterator it_remove che agisce sull'oggetto list di sortedlinkedlist (idem come sopra)
      Processo p = (Processo) it_remove.next(); // ottengo il processo
      memoria -= p.memoria;   // aggiorno la memoria occupata
            //e rimuovo il processo dalla lista
}
   
 public String toString(){
  return ""+pid+" "+name+" "+memoria;
  }
  } //chiudo la classe processo
 
 
 public class EsProcesso{ // classe col main
 public static void main(String[] args) throws IOException
 {
String nomeFile="processes.txt";
BufferedReader fileLettura=null;
SortedLinkedList lista=new SortedLinkedList();
try {
try{
  fileLettura = new BufferedReader(new FileReader(nomeFile));
  String linea=fileLettura.readLine();
  while(linea!=null) {
   String[] tmp=linea.split("\t");
// convertiamo le stringhe in intero con parseInt e valueOf x il contrario
   Processo p=new Processo(Integer.parseInt(tmp[0]),tmp[1],Integer.parseInt(tmp[2]));//mi ero dimenticato io
   lista.add( p);
   linea=fileLettura.readLine();//per far girare il ciclo
  }
}finally{ fileLettura.close();}
}catch(FileNotFoundException e) {// gestisco le eccezioni
  System.out.println("Il file "+nomeFile + " non esiste o non puo' essere aperto");
}catch(IOException e) {
  System.out.println("errore di lettura "+e);
}


   //
Iterator it1=lista.iterator();
while(it1.hasNext()) // fino a che trova un elemento stampa i record
System.out.println((Processo)it1.next());//e cosi puoi vedere tutta la lista     

Iterator it2=lista.iterator(); // creo nuovo iteratore e analizzo lista
while(it2.hasNext())
if(lista.GetMemoria()>100000){
//
   // rimuovi il processo che occupa più memoria
    lista.RemoveMaggiore();
    }
}
 
}

grazie ancora ;)

Offline Max

  • Ex-Staff
  • Membro Anziano
  • *****
  • 363
  • Sesso: Maschio
    • http://www.massimostellin.it
Re: (Java) problemi con iteratori
« Risposta #4 il: 09 Ottobre 2006, 09:16 »
l'oggetto che instanzi con il nome di "lista" è un SortedLinkedList che al suo interno non contiene nessun metodo di nome "GetMemoria" o "RemoveMaggiore".
il listato corretto è così:
Codice: [Seleziona]
public class EsProcesso
{ // classe col main
public static void main(String[] args) throws IOException
{
String nomeFile="processes.txt";
BufferedReader fileLettura=null;
SortedLinkedList lista=new SortedLinkedList();
try {
try{
  fileLettura = new BufferedReader(new FileReader(nomeFile));
  String linea=fileLettura.readLine();
  while(linea!=null) {
   String[] tmp=linea.split("\t");
// convertiamo le stringhe in intero con parseInt e valueOf x il contrario
   Processo p=new Processo(Integer.parseInt(tmp[0]),tmp[1],Integer.parseInt(tmp[2]));//mi ero dimenticato io
   lista.add( p);
   linea=fileLettura.readLine();//per far girare il ciclo
  }
}finally{ fileLettura.close();}
}catch(FileNotFoundException e) {// gestisco le eccezioni
  System.out.println("Il file "+nomeFile + " non esiste o non puo' essere aperto");
}catch(IOException e) {
  System.out.println("errore di lettura "+e);
}


   //
Iterator it1=lista.iterator();
while(it1.hasNext()) // fino a che trova un elemento stampa i record
{
Processo proc = (Processo)it1.next();
System.out.println(proc.toString());//e cosi puoi vedere tutta la lista     
}

// codice aggiunto
while(true)
{
Iterator iter = lista.iterator();
int memtot = 0;
while(iter.hasNext())
{
processo proc = (processo)iter.next();
memtot += proc.getMemoria();
}
if(memtot >= 100000)
{
System.out.print("Limite di memoria raggiunto, ");
//elimina il processo più grande che è nella prima posizione della lista
                            iter = lista.iterator();
processo proc = (processo)iter.next();
System.out.println("elimino il processo:\n"+proc.toString());
iter.remove();
}
else
break;
}
}

1: quando stampi il processo devi mettere il metodo toString senò java ti stamperà dei caratteri incomprensibili che sarebbero l'oggetto processo
2: tutto il resto è sbagliato insieme al metodo "RemoveMaggiore" e GetMemoria dell'oggetto Processo:
- RemoveMaggiore crea una lista vuota e sottrae la memoria dell'oggetto stesso con quello recuperato dalla lista vuota cioè non ha senso
- GetMemoria deve solo recuperare l'intero con la memoria dell'oggetto quindi non deve creare nessuna lista.
- Il resto del listato che sta sotto il ciclo per stampare a video i processi della lista è sbagliato perchè quei 100000 si riferiscono alla somma della memoria di tutti i processi, no se trovi un processo con memoria maggiore di 100000 eliminalo perchè se ci fossero 4 processi di 20000 e uno di 25000 il tuo ciclo non farebbe nulla ed invece dovrebbe eliminare il proc con 25000 perchè la somma darebbe 105000.
« Ultima modifica: 09 Ottobre 2006, 12:44 da Max »

Offline aduri

  • Nuovo Iscritto
  • *
  • 18
Re: (Java) problemi con iteratori
« Risposta #5 il: 10 Ottobre 2006, 00:38 »
Grande Max :)
Ora mi manca solo di stampare i processi rimasti in un file processes1.txt.
Mi e' chiaro il processo di lettura ma ho problemi con quello di scrittura.
Ho creato un oggetto fileScrittura che ho incapsulato in un buffer dopo di che .......... :mc: sto facendo un po' di caos qualcuno mi puo' dare un chiarimento.

Il codice e' stato commentato, cosi' compila.

Grazie


Codice: [Seleziona]
import java.util.*;
import java.lang.*;
import java.io.*;


class Processo implements Comparable{
private int pid;
private String name;
private int memoria;

  public Processo(int pid,String name,int mem){ // costruttore
  this.pid=pid;
  this.name=name;
  memoria=mem;
  }

  public int compareTo(Object o){
  Processo p=(Processo)o;
  return this.memoria-p.memoria;//ordina in base alla quantità di memoria in ordine crescente
   }

      public int getMemoria(){
      return this.memoria;
      }
  public String toString(){
  return ""+pid+" "+name+" "+memoria;
}
 } //chiudo la classe processo


public class EsProcesso
   { // classe col main
        public static void main(String[] args) throws IOException
        {
String nomeFile="processes.txt";
BufferedReader fileLettura=null;
SortedLinkedList lista=new SortedLinkedList();
try {
try{
  fileLettura = new BufferedReader(new FileReader(nomeFile));
  String linea=fileLettura.readLine();
  while(linea!=null) {
   String[] tmp=linea.split("\t");
   // convertiamo le stringhe in intero con parseInt e valueOf x il contrario
   Processo p=new Processo(Integer.parseInt(tmp[0]),tmp[1],Integer.parseInt(tmp[2]));//mi ero dimenticato io
   lista.add( p);
   linea=fileLettura.readLine();//per far girare il ciclo
      } 
   }finally{ fileLettura.close();}
}catch(FileNotFoundException e) {// gestisco le eccezioni
  System.out.println("Il file "+nomeFile + " non esiste o non puo' essere aperto");
     }catch(IOException e) {
      System.out.println("errore di lettura "+e);
       }

   Iterator it1=lista.iterator();
   
while(it1.hasNext()) // fino a che trova un elemento stampa i record
{
Processo proc = (Processo)it1.next();
System.out.println(proc.toString());//e cosi puoi vedere tutta la lista     
}

// codice analisi memoria
while(true)
{
Iterator iter = lista.iterator();
int memtot = 0;
while(iter.hasNext())
{
Processo proc = (Processo)iter.next();
memtot += proc.getMemoria();
}
       if(memtot >= 100000)
     {
System.out.print("Limite di memoria raggiunto, ");
//elimina il processo più grande che è nella prima posizione della lista
iter = lista.iterator();
Processo proc = (Processo)iter.next();
System.out.println("elimino il processo:\n"+proc.toString());
iter.remove();
     }
   else
   break;
}

// String nomeFile1="processes1.txt";
//
//     BufferedWriter fileScrittura=null;
// SortedLinkedList lista1=new SortedLinkedList();
// try {
//    try{
// // Creo un oggetto che incapsulo in un buffer
//   fileScrittura = new BufferedWriter(new FileWriter(nomeFile1));
//
//   String linea1=fileScrittura.readLine();
//   while(linea1!=null) {
//    String[] tmp=linea.split("\t");
//    // convertiamo le stringhe in intero con parseInt e valueOf x il contrario
//    Processo p1=new Processo(Integer.parseInt(tmp[0]),tmp[1],Integer.parseInt(tmp[2]));//mi ero dimenticato io
//    lista.add( p1);
//    linea1=fileScrittura.readLine();//per far girare il ciclo
//       } 
//    }finally{ fileScrittura.close();}
// } catch(IOException e) {
//    System.out.println("errore di scrittura "+e);
//        }
    }
 }

Offline Max

  • Ex-Staff
  • Membro Anziano
  • *****
  • 363
  • Sesso: Maschio
    • http://www.massimostellin.it
Re: (Java) problemi con iteratori
« Risposta #6 il: 10 Ottobre 2006, 09:02 »
non ci siamo.....
tu mi apri un buffer in scrittura vuoto su di un file e poi con il metodo readLine me lo tenti di leggere....
Se vuoi rileggere il file quello che devi fare è prima di tutto scriverci dentro, poi chiudere il buffer e riaprirlo un altro in lettura e allora si che poi puoi usare il metodo readLine.

Su di un buffer BufferedWriter gli unici metodi che t'interessano sono:
write(String) -> scrive la stringa dentro il buffer;
newLine() -> inserisce alla fine del buffer un carattere di "a capo" in base al sistema dove gira il programma;
flush() -> svuota il buffer e lo scrive fisicamente sul file;
close() -> chiude il buffer.

con questi dovresti essere in grado di finire l'esercizio.
« Ultima modifica: 10 Ottobre 2006, 15:18 da Max »

Offline aduri

  • Nuovo Iscritto
  • *
  • 18
Re: (Java) problemi con iteratori
« Risposta #7 il: 10 Ottobre 2006, 17:15 »
Ti ringrazio per l'aiuto,
sto cercando di andare per gradi e sono arrivato a scrivere il codice seguente

ho povato a scrivere una stringa su un file ed e' andato tutto bene:
......
out.println("prova stringa");
....

poi ho provato a scrivere:
.....
out.println(proc); ed ha dato errore il compilatore.
.....

Grazie[:)]


Codice: [Seleziona]
import java.util.*;
import java.lang.*;
import java.io.*;


class Processo implements Comparable{
private int pid;
private String name;
private int memoria;

  public Processo(int pid,String name,int mem){ // costruttore
  this.pid=pid;
  this.name=name;
  memoria=mem;
  }

  public int compareTo(Object o){
  Processo p=(Processo)o;
  return this.memoria-p.memoria;//ordina in base alla quantità di memoria in ordine crescente
   }

      public int getMemoria(){
      return this.memoria;
      }
  public String toString(){
  return ""+pid+" "+name+" "+memoria;
}
 } //chiudo la classe processo


public class EsProcesso
   { // classe col main
        public static void main(String[] args) throws IOException
        {
String nomeFile="processes.txt";
BufferedReader fileLettura=null;
SortedLinkedList lista=new SortedLinkedList();
try {
try{
  fileLettura = new BufferedReader(new FileReader(nomeFile));
  String linea=fileLettura.readLine();
  while(linea!=null) {
   String[] tmp=linea.split("\t");
   // convertiamo le stringhe in intero con parseInt e valueOf x il contrario
   Processo p=new Processo(Integer.parseInt(tmp[0]),tmp[1],Integer.parseInt(tmp[2]));
   lista.add( p);
   linea=fileLettura.readLine();//per far girare il ciclo
      } 
   }finally{ fileLettura.close();}
}catch(FileNotFoundException e) {// gestisco le eccezioni
  System.out.println("Il file "+nomeFile + " non esiste o non puo' essere aperto");
     }catch(IOException e) {
      System.out.println("errore di lettura "+e);
       }

   Iterator it1=lista.iterator();
   
while(it1.hasNext()) // fino a che trova un elemento stampa i record
{
Processo proc = (Processo)it1.next();
System.out.println(proc.toString());//e cosi puoi vedere tutta la lista     
}

// codice analisi memoria
while(true)
{
Iterator iter = lista.iterator();
int memtot = 0;
while(iter.hasNext())
{
Processo proc = (Processo)iter.next();
memtot += proc.getMemoria();
}
       if(memtot >= 100000)
     {
System.out.print("Limite di memoria raggiunto, ");
//elimina il processo più grande che è nella prima posizione della lista
iter = lista.iterator();
Processo proc = (Processo)iter.next();
System.out.println("elimino il processo:\n"+proc.toString());
iter.remove();
     }
   else
   break;
}

     // apertura del file per la scrittura       
FileWriter f = new FileWriter("newproc.txt");       
     // creazione dell'oggetto per la scrittura       
PrintWriter out = new PrintWriter(f);       
    // scrittura del testo su file       
out.println(proc);  //  QUI DA ERRORE IL COMPILATORE     
// chiusura del file       
out.close();    }




    }

Offline Max

  • Ex-Staff
  • Membro Anziano
  • *****
  • 363
  • Sesso: Maschio
    • http://www.massimostellin.it
Re: (Java) problemi con iteratori
« Risposta #8 il: 10 Ottobre 2006, 17:41 »
non ci siamo ancora... usa il BufferedWriter....

Codice: [Seleziona]
....
try{
       // inizializzi il buffer e il file
BufferedWriter buffer = new BufferedWriter(new FileWriter("filefinale.txt"));
// scorri la lista dei processi
       Iterator iter = lista.iterator();
while(iter.hasNext())
{
processo proc = (processo)iter.next(); //estrai dalla lista un singolo processo per volta
buffer.write(proc.toString()); // scrivi il processo in modalità stringa nel buffer
              buffer.newLine(); // inserisci alla fine della riga il carattere di "a capo"
}
       buffer.flush(); // svuoti il buffer e mandi in scrittura tutto
buffer.close(); // chiudi il buffer e il file
}
catch(IOException e)
{
System.out.println(e.toString());
}
........

Offline aduri

  • Nuovo Iscritto
  • *
  • 18
Re: (Java) problemi con iteratori
« Risposta #9 il: 10 Ottobre 2006, 20:09 »
Grazie Max
perfetto.
Comunque ha funzionato anche il mio codice modificando:
out.println(lista);  anziche'  out.println(proc);
l'unica cosa e' che ottengo il file consecutivo senza \t ed e' illeggibile.

Cosa ne pensi?
Mi servirebbe una tua opinione per una questione didattica.


Offline Max

  • Ex-Staff
  • Membro Anziano
  • *****
  • 363
  • Sesso: Maschio
    • http://www.massimostellin.it
Re: (Java) problemi con iteratori
« Risposta #10 il: 10 Ottobre 2006, 20:16 »
no, è un caso che si veda quello che c'è scritto perchè tu salvi un oggetto e non una stringa.
Per i flussi di testo devi fare come ti ho scritto io nel precedente post

Offline aduri

  • Nuovo Iscritto
  • *
  • 18
Re: (Java) problemi con iteratori
« Risposta #11 il: 10 Ottobre 2006, 20:21 »
Chiaro.
Grazie ancora.

Offline aduri

  • Nuovo Iscritto
  • *
  • 18
Re: (Java) problemi con iteratori
« Risposta #12 il: 17 Ottobre 2006, 13:26 »
Chiedo scusa  :-\
ma mi era sfuggita una richiesta che mi mette in difficolta'.
Mi viene chiesto di:
fare i grafici dell'occupazione di memoria e del numero di processi (in ogni istante)
e valutare il costo computazionale per mantenere la lista ordinata e per eliminare il processo che occupa piu' memoria.

Grazie dell'aiuto  :)

Offline Max

  • Ex-Staff
  • Membro Anziano
  • *****
  • 363
  • Sesso: Maschio
    • http://www.massimostellin.it
Re: (Java) problemi con iteratori
« Risposta #13 il: 18 Ottobre 2006, 10:22 »
per fare i grafici dipende da quello che ti chiede il prof, li puoi fare a mano utilizzando le librerie grafiche di java oppure ti puoi appoggiare a qualche libreria specifica per queste rappresentazioni (http://www.jfree.org/jfreechart/)