aduri
19-09-2006, 16:16
Salve a tutti.
Il programma compila fino all'ordinamento della lista in ordine crescente ma non rimuove l'ultimo record.
Non ho ancora implementato il controllo sulla somma di memoria che dovrebbe cancellare il processo che occupa piu' memoria quando la somma della memoria supera 100000.
Qualcuno mi puo' dare una dritta?
ecco il codice
A presto
Codice:
import java.util.*;
import java.io.*;
import javax.swing.JOptionPane;//utility pannello di dialogo
class MyFile {
public int memoria;
public int pid;
public String nome;
MyFile (String linea)
{
String aTmp[] = linea.split("\t");
this.memoria = Integer.parseInt(aTmp[2]);
this.nome = aTmp[1];
this.pid = Integer.parseInt(aTmp[0]);
}
MyFile (int memoria, String nome)
{
this.pid = pid;
this.memoria = memoria;
this.nome = nome;
}
public static void main(String[] args) throws IOException
{
Keymemoria keymemoria = new Keymemoria();
// KeyNome keyNome = new KeyNome();
Vector v = new Vector();// creo Vector (array dinamico)
// Carico file da processes.txt
//String nomeFile=JOptionPane.showInputDialog("Digita il nome del file da leggere");
String nomeFile="processes.txt"; //altro modo di input file diretto da codice
BufferedReader fileLettura;
try {
fileLettura = new BufferedReader(new FileReader(nomeFile));
while(true) {
String linea = fileLettura.readLine();
if(linea==null) {
break;
} else {
v.add( new MyFile(linea) );
}
}
} 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);
}
MyFile[] a = new MyFile[v.size()];
for( int i = 0; i < v.size(); i++ ) {
a[i] = (MyFile)v.get(i);
}
System.out.println ("------------------");
System.out.println ("Array non ordinato: ");
System.out.println ("pid nome memoria");
for (int k = 0; k < a.length; k++) {
System.out.println (a[k].pid + " " + a[k].nome+ " " + a[k].memoria);
}
System.out.println ("------------------");
System.out.println ("Array ordinato rispetto alla dimensione della memoria: ");
System.out.println ("pid nome memoria");
Arrays.sort (a, keymemoria);
for (int k = 0; k < a.length; k++) {
System.out.println (a[k].pid + " " + a[k].nome+ " " + a[k].memoria);
}
System.out.println ("------------------");
//Implemento la ricerca binaria per dimensione
System.out.println ("");
}
}
class Keymemoria implements Comparator {
public int compare (Object MyFile1, Object MyFile2)
{
int memoria1 = ((MyFile) MyFile1).memoria;
int memoria2 = ((MyFile) MyFile2).memoria;
return (memoria1 < memoria2 ? -1 : (memoria1 == memoria2 ? 0 : 1));
}
}
public class ScanDeleteLast {
SortedLinkedList l = new SortedLinkedList();
ListIterator it = l.listIterator();
for ( int i = 0; i < l.lenght; i++ )
{
while(it.hasNext()) {
String item = (String) l.next();
}
// toglie l’ultimo elemento traversato
it.remove(); // rimuove record con memoria maggiore
}
}
Questo e' uno stralcio del file di teto 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
Il programma compila fino all'ordinamento della lista in ordine crescente ma non rimuove l'ultimo record.
Non ho ancora implementato il controllo sulla somma di memoria che dovrebbe cancellare il processo che occupa piu' memoria quando la somma della memoria supera 100000.
Qualcuno mi puo' dare una dritta?
ecco il codice
A presto
Codice:
import java.util.*;
import java.io.*;
import javax.swing.JOptionPane;//utility pannello di dialogo
class MyFile {
public int memoria;
public int pid;
public String nome;
MyFile (String linea)
{
String aTmp[] = linea.split("\t");
this.memoria = Integer.parseInt(aTmp[2]);
this.nome = aTmp[1];
this.pid = Integer.parseInt(aTmp[0]);
}
MyFile (int memoria, String nome)
{
this.pid = pid;
this.memoria = memoria;
this.nome = nome;
}
public static void main(String[] args) throws IOException
{
Keymemoria keymemoria = new Keymemoria();
// KeyNome keyNome = new KeyNome();
Vector v = new Vector();// creo Vector (array dinamico)
// Carico file da processes.txt
//String nomeFile=JOptionPane.showInputDialog("Digita il nome del file da leggere");
String nomeFile="processes.txt"; //altro modo di input file diretto da codice
BufferedReader fileLettura;
try {
fileLettura = new BufferedReader(new FileReader(nomeFile));
while(true) {
String linea = fileLettura.readLine();
if(linea==null) {
break;
} else {
v.add( new MyFile(linea) );
}
}
} 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);
}
MyFile[] a = new MyFile[v.size()];
for( int i = 0; i < v.size(); i++ ) {
a[i] = (MyFile)v.get(i);
}
System.out.println ("------------------");
System.out.println ("Array non ordinato: ");
System.out.println ("pid nome memoria");
for (int k = 0; k < a.length; k++) {
System.out.println (a[k].pid + " " + a[k].nome+ " " + a[k].memoria);
}
System.out.println ("------------------");
System.out.println ("Array ordinato rispetto alla dimensione della memoria: ");
System.out.println ("pid nome memoria");
Arrays.sort (a, keymemoria);
for (int k = 0; k < a.length; k++) {
System.out.println (a[k].pid + " " + a[k].nome+ " " + a[k].memoria);
}
System.out.println ("------------------");
//Implemento la ricerca binaria per dimensione
System.out.println ("");
}
}
class Keymemoria implements Comparator {
public int compare (Object MyFile1, Object MyFile2)
{
int memoria1 = ((MyFile) MyFile1).memoria;
int memoria2 = ((MyFile) MyFile2).memoria;
return (memoria1 < memoria2 ? -1 : (memoria1 == memoria2 ? 0 : 1));
}
}
public class ScanDeleteLast {
SortedLinkedList l = new SortedLinkedList();
ListIterator it = l.listIterator();
for ( int i = 0; i < l.lenght; i++ )
{
while(it.hasNext()) {
String item = (String) l.next();
}
// toglie l’ultimo elemento traversato
it.remove(); // rimuove record con memoria maggiore
}
}
Questo e' uno stralcio del file di teto 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