|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2007
Messaggi: 207
|
[Java]un problema nel confronto
Salve a tutti,questo mio problema lo sto affrontando da diverse ore :
ho creato un semplice algoritmo divide et impera per contare le ricorrenze d un particolare elemento(senza usare i generics percio in questo caso e' una stringa) all'interno di un array la funzione rikorsiva e' questa : Codice:
public int countTargetDivideEtImpera(String[] vect,int i,int j){
int c = 0;
int middle;
if(i == j){
if (vect[i] == "aba")
c = 1;
else
c = 0;
return c;
}else{
middle = (i + j)/2;
return countTargetDivideEtImpera(vect,i,middle) + countTargetDivideEtImpera(vect,middle + 1,j);
}
}
Codice:
public int countTargetDivideEtImpera(String[] vect,int i,int j,String target){
int c = 0;
int middle;
if(i == j){
if (vect[i] == target)
c = 1;
else
c = 0;
return c;
}else{
middle = (i + j)/2;
return countTargetDivideEtImpera(vect,i,middle,target) + countTargetDivideEtImpera(vect,middle + 1,j,target);
}
}
vect[i] == target un determinato elemento di vect kon indice i risulta essere uguale a target >_> ma nn va nel ramo true dell' if,va nell'else e ritorna 0 spero che qualk1 mi sia di aiuto e ringrazio in anticipo ^^' |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2002
Città: Modena
Messaggi: 592
|
Prova:
Codice:
if(vect[i].equals(target)) Ciauz |
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Sep 2007
Messaggi: 207
|
Quote:
pero nn ho capito perke' ora si e prima no alla fine vect[i].equals(target) nn e' uguale a scrivere vect[i] == target? io pensavo di si cmq grazia mille^_^ |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2000
Messaggi: 1459
|
è assolutamente diverso. L'utilizzo dell'operatore == su oggetti porta al confronto degli indirizzi. Prima ti funzionava perchè, presumibilmente, hai inizializzato il vettore con vect[k]="aba". Queste costanti note a compile time vengono memorizzate una sola volta nel constant pool.
ciao Ultima modifica di The3DProgrammer : 15-09-2007 alle 21:23. |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Sep 2007
Messaggi: 207
|
no ma l'array che passo alla procedura nn e' inizializzato costante
cmq ho fatto prima delle prove e risulta false se la stringa la acquisisco da tastiera [ premettendo ke uso un oggetto scanner e il metodo nextline ] per esempio : String ciao = "ciao"; vect[i] == ciao //e' true supponendo ke in vect[i] ci sia la stringa ciao e String ciao = null; Scanner keyboard = new Scanner(System.in); ciao = keyboard.nextLine(); vect[i] == ciao // mi torna false anke se inserisco ciao da tastiera supponendo sempre ke in vect[i] c sia la stringa ciao credo sia per l'enter finale ke viene inserito nella stringa a sto punto bho(anke se provando il confronto dopo l'acquisizione: ciao == "ciao\n" mi torna false ankora,percio escluderei pure l'enter digitato dall'utente per acquisire la stringa) purtroppo nn ho ankora molta dimestikezza kol java e nn conosco bene il linguaggio per fare le giuste prove |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: May 2000
Messaggi: 1459
|
Scrivere
String ciao = "ciao"; vect[k]=ciao; oppure vect[k]="ciao"; porta allo stesso risultato in termini di indirizzi di memoria. se vuoi che nn ti funzioni, prova String ciao = new String("ciao"); vect[k]=ciao; Ti ripeto, il confronto con == su oggetti confronta gli indirizzi, e visto che la stringa "ciao" viene allocata una sola volta nel constant pool, ovunque utilizzerai la costante "ciao" avrai sempre lo stesso indirizzo, e == darà esito positivo. ciao |
|
|
|
|
|
#7 |
|
Messaggi: n/a
|
per dirla in breve == controlla se sono la stessa stringa, equals(Object) controlla se le stringhe hanno lo stesso testo. È diverso.
kome mai scrivi tutto con la k??????? |
|
|
|
#8 |
|
Member
Iscritto dal: Sep 2007
Messaggi: 207
|
scusate ma a sto punto la variabile ciao e vect[i] sono oggetti stringa diversi ma con lo stesso testo ,perche' mi torna true se hanno due indirizzi diversi essendo due oggetti stringa separati?
PS:scusate se scrivo con la k ma anni e anni d chat e sms cazzuti mi hanno plagiato XD[sono un giovane universitario ghghgh |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
|
Quote:
Per questo il confronto funziona: se tu però ESPLICITAMENTE allochi una nuova stringa con new String("ciao"), Java crea un nuovo oggetto in memoria, praticamente identico all'altro, creato automaticamente come ho detto sopra, salvo che per il riferimento, che è diverso. Quindi "==", che confronta proprio i riferimenti, non funzionerà.
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN |
|
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Feb 2004
Città: Rimini
Messaggi: 247
|
Alla fine basta che ti tieni in mente questa cosa:
se controlli uguaglianza di tipi primitivi(int, boolean ecc.) allora usi sempre == se controlli uguaglianza di oggetti usi sempre .equals Ciao
__________________
"Se per caso il C non fosse sufficiente il Vero Programmatore lavorera' in assembler, se neppure questo fosse sufficiente allora il lavoro non e' fattibile, ma la cosa e' impossibile, un Vero Programmatore in C ed assembler puo' fare TUTTO, per definizione." |
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Sep 2007
Messaggi: 207
|
ok vi ringrazio ora ho capito bene :P
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:54.




















