PDA

Visualizza versione completa : Code, metodi e tutto quello che potevate chiedere su Java



Zargon
11-04-2004, 00.30.08
appassionati(?) di Java, mi servivano alcuni consigli e pareri :dentone:

il metodo che devo creare č il seguente:

presente: che, dato l'identificatore di un oggetto da riparare, restituisce true se l'oggetto č nel laboratorio, false altrimenti;

l'ho creato in questi due modi (vi posto tutta la classe):

class Riparazione {
public String oggetto;
public String tipoRiparazione;
}

class Nodo {
public Riparazione info;
public Nodo next;
}

public class LaboratorioRiparazione {
private String nome;
private Nodo nodotesta;
private Nodo nodocoda;

public LaboratorioRiparazione(String n) {
nome=n;
nodotesta=null;
nodocoda=null;
}
public String nome() {
return nome;
}
public boolean presente(String oggetto) {
if(nodotesta==null)
return false;
else {
boolean trovato=false;
Nodo q = nodotesta;
while(q!=null && !trovato) {
if(q.info.oggetto.equals(oggetto)) {
trovato=true;
return true;
}
q=q.next;
}
return false;
}
}
public boolean presente2(String oggetto) {
if(nodotesta==null)
return false;
else {
Nodo q = nodotesta;
while(q!=null && !q.info.oggetto.equals(oggetto))
q=q.next;
if(q!=null)
return true;
else
return false;
}
}
}

il compilatore non da errori. Quello che vi volevo chiedere č, quale dei due (presente e presente2) č realizzato in modo migliore?
se devo essere sincero ho qualche timore che il metodo presente possa dare dei problemi, ma non ne sono sicuro... credo mi dia + certezze il metodo presente2.
+ in lą posto altre cosucce...

Zargon
11-04-2004, 01.40.10
scrivo qui l'esercizio d'esame, e nel topic successivo il mio svolgimento:


Si vogliono gestire dei laboratori di riparazione. Di un oggetto LaboratorioRiparazione sono di interesse il nome del laboratorio (una stringa) e la collezione delle riparazioni che devono essere effettuate. Di ogni riparazione sono di interesse le seguenti informazioni:

un identificatore dell'oggetto da riparare (una stringa);

il tipo di riparazione che deve essere effettuata sull'oggetto (una stringa).

Gli oggetti LaboratorioRiparazione supportano le seguenti funzionalitą:
crea: che, data una stringa n che rappresenta il nome di laboratorio, crea un oggetto LaboratorioRiparazione con nome n che inizialmente non ha alcuna riparazione da effettuare;
nome: che restituisce il nome del LaboratorioRiparazione;
presente: che, dato l'identificatore di un oggetto da riparare, restituisce true se l'oggetto č nel laboratorio, false altrimenti;
tipo: che, dato l'identificatore di un oggetto da riparare, restituisce il tipo di riparazione da effettuare sullo stesso, se l'oggetto č nel laboratorio, altrimenti lancia una eccezione;
aggiungi: che, dato l'identificatore di un oggetto da riparare ed il tipo di riparazione da effettuare sullo stesso, aggiunge una nuova riparazione in coda alle riparazione da effettuare; tuttavia se č gią presente un oggetto da riparare con lo stesso identificatore, lancia una eccezione.
serviPrimo: che effettua la prima riparazione in coda, eliminandola dalla coda e restituendo una stringa ottenuta dalla concatenazione dell'identificatore dell'oggetto da riparare, del carattere ';' e del tipo di riparazione da effettuare; se non c'e' alcuna riparazione da effettuare lancia una eccezione;
serviTipo: che, dato un tipo di riparazione, effettua la prima riparazione in coda di quel tipo, eliminandola dalla coda e restituendo l'identificatore dell'oggetto da riparare; se non c'e' alcuna riparazione di quel tipo da effettuare restituisce null;
quantiTipo: che, dato un tipo di riparazione, restituisce il numero di riparazioni da effettuare di quel tipo;
tuttiTipo: che, dato un tipo di riparazione, restituisce un array di stringhe contenente gli identificatori degli oggetti su cui si deve effettuare la riparazione di quel tipo.

Zargon
11-04-2004, 01.42.46
Lo svolgimento č il seguente. Premetto che il compilatore non dą nessun errore. Volevo solo un vostro commento e magari qualche consiglio per migliorare il programma. Dimenticavo, le eccezioni sono gestiti dalla classe EccezioneLaboratorio che ho evitato di postare per la sua banalitą.

class Riparazione {
public String oggetto;
public String tipoRiparazione;
}

class Nodo {
public Riparazione info;
public Nodo next;
}

public class LaboratorioRiparazione {
private String nome;
private Nodo nodotesta;
private Nodo nodocoda;

public LaboratorioRiparazione(String n) {
nome=n;
nodotesta=null;
nodocoda=null;
}
public String nome() {
return nome;
}
public boolean presente(String oggetto) {
if(nodotesta==null)
return false;
else {
Nodo q = nodotesta;
while(q!=null && !q.info.oggetto.equals(oggetto))
q=q.next;
if(q!=null)
return true;
else
return false;
}
}
public String tipo(String oggetto) throws EccezioneLaboratorio {
if(nodotesta==null)
throw new EccezioneLaboratorio("Errore!");
else {
Nodo q = nodotesta;
while(q!=null && !q.info.oggetto.equals(oggetto))
q=q.next;
if(q!=null)
return q.info.tipoRiparazione;
else
throw new EccezioneLaboratorio("Oggetto non presente nel laboratorio");
}
}
public void aggiungi(String oggetto,String riparazione) throws EccezioneLaboratorio{
if(!presente(oggetto)) {
Riparazione r = new Riparazione();
r.oggetto=oggetto;
r.tipoRiparazione=riparazione;
Nodo aux = new Nodo();
aux.info=r;
aux.next=null;
if(nodotesta==null) {
nodotesta=aux;
nodocoda=aux;
}
else {
nodocoda.next=aux;
nodocoda=aux;
}
}
else
throw new EccezioneLaboratorio("Errore");

}
public String serviPrimo() throws EccezioneLaboratorio {
if(nodotesta==null)
throw new EccezioneLaboratorio("Errore,niente da eliminare");
else {
String ris = nodotesta.info.oggetto+";"+nodotesta.info.tipoRiparazione;
nodotesta=nodotesta.next;
if(nodotesta==null)
nodocoda=null;
return ris;
}
}
public String serviTipo(String tipo) {
String identificatore;
if(nodotesta==null)
return null;
else {
Nodo aux=nodotesta;
aux.next=nodotesta;
nodotesta=aux;
while(aux.next!=null && !aux.next.info.tipoRiparazione.equals(tipo))
aux=aux.next;
if(aux.next==null) {
nodotesta=nodotesta.next;
throw new EccezioneLaboratorio("Errore");
}
else {
identificatore = aux.next.info.oggetto;
aux.next=aux.next.next;
if(aux.next==null)
nodocoda=aux;
if(nodotesta==null)
nodocoda=null;
}
return identificatore;
}
}
public int quantiTipo(String tipo) {
int riparazioni=0;
Nodo q = nodotesta;
while(q!=null) {
if(q.info.tipoRiparazione.equals(tipo))
riparazioni++;
q=q.next;
}
return riparazioni;
}
public String[] tuttiTipo(String tipo) {
String[] array = new String[quantiTipo(tipo)];
int i=0;
Nodo q=nodotesta;
while(q!=null) {
if(q.info.tipoRiparazione.equals(tipo)) {
array[i]=q.info.oggetto;
i++;
}
q=q.next;
}
return array;
}
}

Zargon
11-04-2004, 02.04.29
Ok quello che ho postato precedentemente č lo svolgimento della prima domanda che vi riporto

Domanda 1. Scrivere una classe Java LaboratorioRiparazione per rappresentare oggetti LaboratorioRiparazione. Fornire il costo in tempo dei metodi che realizzano le funzionalitą tipo, serviTipo e tuttiTipo, motivando la risposta (indicando esplicitamente i parametri di input e il caso peggiore).

A 3 giorni dall'esame, bene o male conosco tutto... ma ragazzi ancora non ho capito come si calcolsa il costo!!!
Datemi una mano x cortesia :dentone:

Domanda 2. Realizzare un metodo statico oggettiInRiparazione cliente della classe LaboratorioRiparazione che, dati

un array di stringhe arr contenente un insieme di tipi di riparazione (tutti diversi tra loro) ,

il nome fout di un file,

ed un LaboratorioRiparazione lr

scrive sul file fout, uno per riga, gli identificatori degli oggetti in riparazione in lr il cui tipo sia presente in arr. Fornire il costo in tempo del metodo realizzato, motivando la risposta e individuando i parametri di input e il caso peggiore.

ecco il mio svolgimento:

prima di tutto mi sono creato un metodo ausiliario nella classe principale:

//metodo ausiliario
public String oggetto(String tipo) throws EccezioneLaboratorio {
if(nodotesta==null)
throw new EccezioneLaboratorio("Oggetto non presente!");
else {
Nodo q = nodotesta;
while(q!=null && !q.info.tipoRiparazione.equals(tipo))
q=q.next;
if(q!=null)
return q.info.oggetto;
else
throw new EccezioneLaboratorio("Errore");
}
}

poi ho creato l'altra classe:

import java.io.*;

public class ClienteLaboratorio {
public static void oggettiInRiparazione(String[] arr,String fout,LaboratorioRiparazione lr) throws IOException{
FileWriter f = new FileWriter(fout);
PrintWriter pw = new PrintWriter(f);
for(int i=0;i<arr.length;i++) {
if(lr.presente(arr[i]))
pw.println(lr.oggetto(arr[i]));
}
pw.close();
f.close();
}
}

come al solito vi chiedo pareri e consigli su miglioramenti e possibili errori. E se ne siete capaci spiegatemi 'sto cazzo di costo che nn c'ho capito molto... O almeno ditemi dove posso trovare qualche sito dove lo spiega in maniera comprensibile visto che sulle mie dispense č spiegato da cani...

E' tutto. Grazie a tutti e buona pasqua!

TrustNoOne
11-04-2004, 05.04.05
meglio la seconda, la prima tra l'altro c'ha un boolean inutile.

Il resto non ho voglia di leggerlo ora.. sono le 4 del mattino eh :asd:

Che cavolo e' il costo in tempo :doubt:
Vuole sapere quale metodo usa piu' cpu time? Cioe' quale fa piu' operazioni?

Scrivilo in c++ e disassemblalo :asd:

Zargon
24-04-2004, 19.03.43
Esame: Tecniche di Programmazione
Voto finale: 27 :D :cool:

un saluto e un ringraziamento al mio "maestro" Fol che mi ha aiutato dall'inizio e che con tanta pazienza mi ha spiegato tante cose. Ancora grazie :) e perdonami per gli scleri del passato