(Java) problema con iteratori

aduri

Nuovo Utente
3 Ott 2006
13
2
0
58
Genova
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:
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:
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
 
  • Like
Reactions: ottofonsuppost

ottofonsuppost

Utente Attivo
10 Mag 2016
172
13
18
Qui l'utente chiede di scrivere per lui il PUNTO 3 del COMPITO ASSEGNATOGLI DAL PROFESSORE, ma l'utente non pubblica la sua soluzione, seppur sbagliata. Se non si sanno le istruzioni di JAVA, si fa un corso: oggi ne esistono anche di gratuiti; mentre il FORUM deve essere utilizzato non per farsi fare i compiti gratis, ma per risolvere piccoli intoppi procedurali che risultano ostici, dopo aver letto i MANUALI di UN CORSO GRATUITO JAVA.
W IL FORUM MR. WEBMASTER !!! e... ABBASSO I FURBACCHIONI !!!

Quando ne avremo voglia e tempo, utilizzeremo questo PUNTO 3 per fornire il CODICE di implementazione; che ci servirà per esercitazione nel nostro corso gratuito

Ottofonsuppost e la grande guerra a JAVA - Corso GRATIS per neofiti

http://forum.mrw.it/threads/ottofonsuppost-e-la-grande-guerra-a-java-corso-gratis-per-neofiti.45758/
 
Discussioni simili
Autore Titolo Forum Risposte Data
L Problema con recupero dati in PHP cURL e JAVA con server PHP 1
G Problema con algoritmo ricorsivo [backtracking] java Java 1
A [Java] Problema con la dimensione di un jframe Java 2
T java-problema con i file wav Java 0
L Problema con finestre IE e java Windows e Software 1
U Problema java con <div> Javascript 0
P Problema con java Java 2
N [Java]problema jasper report dopo compilazione file .jar Java 0
A [java] problema esercizio Java 0
A [java] problema esercizio array Java 5
Sevenjeak [Java EE] Problema JUnit e alcuni chiarimenti su jee Java 0
D Problema Java da risolvere Java 3
G Problema Firefox 32.0.3 e Sun Java Windows e Software 2
voldemort Java e problema compressione/decompressione LZW Java 0
A Problema gestione galleria fotografica in java Javascript 4
T problema connessione db java Java 4
T [Java] semplice problema Java 2
T [Java] Problema evento Java 1
F problema di applet-java Javascript 1
B [Java] Problema cn EircApplet Java 0
A [Cerchiamo] [Retribuito/a] "Java Solution Architect" Offerte e Richieste di Lavoro e/o Collaborazione 1
F Script java elenco alfabetico non funziona Javascript 3
C Serializzazione in java Java 1
M AIUTO ESERCIZIO JAVA Javascript 1
M Ripasso Java Offerte e Richieste di Lavoro e/o Collaborazione 0
F [OFFRO - RETRIBUITO] Sviluppatori JAVA Offerte e Richieste di Lavoro e/o Collaborazione 0
L leggere RGB di un pixel dello schermo in java Java 1
I Creazione programmino JAVA Offerte e Richieste di Lavoro e/o Collaborazione 0
F Aiuto java script Javascript 2
T [Java] tipi generici con esempio pratico Java 1
J File audio in java Java 0
V [JAVA] come integrare un software scritto in java su una pagina web? Java 4
C Java client / server Java 0
F [OFFRO][RETRIBUITO] PROGRAMMATORE JAVA Offerte e Richieste di Lavoro e/o Collaborazione 0
C [Java] testare un metodo con Junit Java 1
A [Java] caricare un url esterno senza utilizzo di iframe Java 0
S [OFFRO] Debug delle tue applicazioni Java Offerte e Richieste di Lavoro e/o Collaborazione 1
L [Java] Aggiungere elementi ad array JSON Java 0
B [Java] Paginazione in risposta HTTP Java 0
A [Java]Date diminuite di un giorno su db MySQL Java 0
K [Java] aiuto switch case Java 1
P [Java] limite destro di un JFrame Java 5
D [Java] far partire JProgressBar all'apertura di un JFrame Java 1
N [java con eclipse]metodo ricorsivo che accetta in ingresso un char e restituisce un int Java 0
A Verifica validità data in Java Java 2
L [Java] Errore json conversione Java 0
Drago73 [Java] leggere/scrivere txt server Java 0
M [Javascript] Java card Java 0
serena.cerutti posizioni aperte: PhP, Java, .Net Offerte e Richieste di Lavoro e/o Collaborazione 0
N [Java] Piccolo jform per calcolo totale da 2 campi i double Java 0

Discussioni simili