|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2002
Città: Prov. di Torino
Messaggi: 457
|
Esercizio su Java
Ho un esercizio da fare per l'università con Java, il testo è questo:
----------- Definire una classe ProvaArray contenente due metodi e il main, rispettando le specifiche qui elencate(nomi di variabili e metodi, commenti e precondizioni fanno parte della valutazione): 1) Il primo metodo deve prendere come parametri due array di stringhe di uguale lunghezza e restituire come risultato un nuovo array di booleani contenente in ogni cella il valore di verità vero se le stringhe nelle celle corrispondenti dei due array in input sono uguali e falso altrimenti. Ad ESEMPIO, dati primo array: "Pippo" , "Pluto" , "Topolino" e secondo array: "Pippo" , "Pluto" , "Paperino" restituisce l'array contenente vero, vero, falso Si assume che i due array in input abbiano la stessa lunghezza, ma occorre gestire adeguatamente il caso in cui siano dati in input degli array che non rispettano le specifiche del metodo. ------- Il 1° metodo l'ho fatto così: public static boolean[] strequal(String[] a, String[] b) { boolean[] c = new boolean[a.length]; for(int i = 0; i < c.length; i++) { c[i] = a[i].equals(b[i]); } return c; } ma nn funziona!!!! Qualcuno sa aiutarmi ??? Grazie...tony
__________________
::tony design |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
io avrei fatto cosi:
Codice:
public static boolean[] strequal(String[] a, String[] b)
{
/* non sono uguali ?? allora esce ! */
if (a.length != b.length) return null;
/* crea un'array di n elementi che contiene il risultato */
boolean[] res = new boolean[a.length];
/* cicla per tutti gli elementi degli array confrontandoli */
for (int i=0; i<a.length; i++)
{
res[i] = (a[i].compareTo(b[i]) == 0);
}
return res;
}
|
|
|
|
|
|
#3 | |
|
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Re: Esercizio su Java
Quote:
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2002
Città: Prov. di Torino
Messaggi: 457
|
VICIUS Ho provato con il codice che hai proposto tu, ma è come prima, mi compila tutto bene, solo che nell'esecuzione è sbagliato.....
aiutatemi ::tony
__________________
::tony design |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2002
Città: Prov. di Torino
Messaggi: 457
|
Ho capito, ho sbagliato una cosa nel main!!!!
Il testo dell'esercizio chiede ancora un metodo: ----------------- 2) Il secondo metodo prende come parametro un array di booleani e stampa vero se tutti gli elementi sono veri e falso altrimenti. ---------------- Io l'ho fatto così: public static void print(boolean[] c) { boolean ris = c[0]; int allequals = 1; for(int i = 1; i < c.length; i++) { if(c[i] != ris) allequals = 0; } if(allequals == 1) { if(ris == true) System.out.println("VERO"); else System.out.println("FALSO"); } } Quando sono tutti "true" ok, mi stampa "VERO", ma quando ci sono anche dei "false" non mi stampa niente(in teoria deve stampare "FALSO") !!! Grazie a tutti ::tony
__________________
::tony design |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Dec 2001
Città: Bari.
Messaggi: 209
|
Prova questo:
Codice:
public static void print(boolean[] c) {
if (c != null) {
int i = 1;
boolean tmp = c[0];
while (i < c.length && tmp){
tmp &= c[i++];
}
System.out.println(tmp ? "vero" : "falso");
}
}
__________________
Se il giudice fosse giusto, forse il criminale non sarebbe colpevole - Dostoevskij |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Se posso permettermi una sottigliezza:
Io invertirei la condizione del ciclo while Codice:
while (i < c.length && tmp) Codice:
while (tmp && i < c.length) |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Quote:
Alcuni consigli: allequals scrivilo come allEquals oppure all_equals è più leggibile. Non puoi inizializzare subito c[0]...e se il vettore è null?? Poi se vuoi usare un codice simile al tuo io lo correggerei così: Codice:
public static void print(boolean[] c)
{
if (c != null){
boolean ris = c[0];
boolean allEquals = true;
for(int i = 1; i < c.length; i++)
{
allEquals = (c[i] == ris);
if (!allEquals )
break;
//esci subito dal ciclo senza scorrerti tuttuo il vettore
//pensa se il primo elemento è diverso e poi ne hai un milione uguali
}
if(allEquals)
System.out.println("Sono tutti " + ris);
else
System.out.println("FALSO");
}
}
Ultima modifica di cn73 : 01-09-2003 alle 15:35. |
|
|
|
|
|
|
#9 | |
|
Member
Iscritto dal: Dec 2001
Città: Bari.
Messaggi: 209
|
Quote:
__________________
Se il giudice fosse giusto, forse il criminale non sarebbe colpevole - Dostoevskij |
|
|
|
|
|
|
#10 | |
|
Member
Iscritto dal: Aug 2003
Città: Roma
Messaggi: 35
|
Quote:
__________________
~~~~~~~~~~~~~~~~~~ "Cogito ergo rhum" |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Io non sono esperto di Java, ma chi ha detto che viene valutata prima la prima condizione ? Qualsiasi supposizione sull'ordine di valutazione degli operandi è erronea...almeno così è per altri linguaggi...visto che è un dettaglio implementativo del compilatore...
Magari Java avendo un solo "proprietario" è più preciso su queste cose, ma non credo che niente vieti di variare l'implementazione del compilatore senza preavviso... |
|
|
|
|
|
#12 | |
|
Member
Iscritto dal: Dec 2001
Città: Bari.
Messaggi: 209
|
Quote:
__________________
Se il giudice fosse giusto, forse il criminale non sarebbe colpevole - Dostoevskij |
|
|
|
|
|
|
#13 |
|
Member
Iscritto dal: Aug 2003
Città: Roma
Messaggi: 35
|
... inoltre l'operatore && (così come || ) viene utilizzato proprio affinchè venga rispettato un ordine di valutazione delle condizioni; ciò significa che nella condizione A && B se A è falsa B non viene valutata.
Qualora si desideri che B venga valutata nonostante A sia falsa si dovrebbe scrivere A & B
__________________
~~~~~~~~~~~~~~~~~~ "Cogito ergo rhum" |
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:59.



















