|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2007
Messaggi: 185
|
[JAVA]Cambiare un valore a caso di una stringa.
Salve! Devo cambiare un valore a caso di una stringa, composta da cifre dallo 0 al 9, di un valore inferiore o maggiore del valore preesistente, tale valore sarà maggiore o minore a caso.
La dimensione del char array che rappresenta la stringa è 7 ( 8 caselle) Ad esempio: 72839487 in input se scelgo il terzo digit 8 posso avere o 7 o 9 (con il 50% di probabilità) 72739487 o 72939487 Nel caso il valore sia 0 o 9 (valori limite), si sostituisce tale valore con 1 nel caso dello 0 e con 8 nel caso del 9. Ad esempio: 72039487 diventa per forza 72139487 Il codice vecchio che ho cambia il valore a caso più radicalmente, portandolo da 0 a 9. Questo è il codice: char_chromosome[(int) Math.round(Math.random() * 7)] = Character .forDigit((int) Math.round(Math.random() * 9), 10); Mi potete aiutare? Grazie |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Aug 2010
Messaggi: 138
|
scusa dimmi se ho capito bene :
Tu hai una stringa contenente un numero (intero ) e vuoi incrementare o decrementare questo num? Nella stringa oltre al numero c'è altro? |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2007
Messaggi: 185
|
esatto, incrementarlo o diminuirlo di uno ma a CASO.
No nella stringa non c'è altro, solo che la stringa la trasformo in un char array e poi la ritrasformo in stringa per comodità... |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Aug 2010
Messaggi: 138
|
ma per "a caso cosa intendi"? tu hai parlato i evento limite (0 e 9) quindi devi controllare il valore del numero che vuoi modificare , giusto?
il tuo problema è solo quello di generare casualmente 1 o -1 ? int GeneraN(){ int x=(int)(Math.random()*2 - Math.random()*2); if (x==0) return GeneraN; else return x; } |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Oct 2007
Messaggi: 185
|
esatto, devo controllare il valore del numero che devo modificare, perchè se è 0 diventerà per forza 1 e se è 9 per forza 8
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Quote:
Codice:
if array[index] == '0'
cambia
else if array[index] == '9'
cambia
else
cambia
ma per caso devi gestire anche un eventuale overflow? |
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Aug 2010
Messaggi: 138
|
QUOTO CLOCKOVER
|
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Oct 2007
Messaggi: 185
|
ok ci siamo ma per mettere un valore casuale tra -1 e +1?
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Aug 2010
Messaggi: 138
|
Nel main:
Codice:
boolean controllo=true; while(controllo) int x=(int)(Math.random()*2 - Math.random()*2); if (x!=0) controllo =false; } int numeroCasuale=x; Ultima modifica di Gin&&Tonic : 25-03-2011 alle 14:46. |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Oct 2007
Messaggi: 185
|
ok grazie perfetto!
|
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Aug 2010
Messaggi: 138
|
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12859
|
Quote:
Codice:
int Genera()
{
double val = Math.random();
return val < 0.5 ? -1 : 1;
}
|
|
|
|
|
|
|
#13 |
|
Member
Iscritto dal: Oct 2007
Messaggi: 185
|
Codice:
public class test {
public static void main(String args[]){
String chromosome="03827593";
char[] char_chromosome = chromosome.toCharArray();
System.out.println(chromosome+" vecchio ---------");
int pos=(int) Math.round(Math.random() * 7);
int x=(int)(Math.random()*2 - Math.random()*2);
if (char_chromosome[pos]==0) char_chromosome[pos]=1;
if (char_chromosome[pos]==9) char_chromosome[pos]=8;
else{
char_chromosome[pos]=(char) (char_chromosome[pos]+x);
}
String new_chromosome = new String(char_chromosome);
chromosome = new_chromosome;
System.out.println(chromosome+" nuovo -------------");
}
}
03827593 vecchio --------- 03827593 nuovo ------------- Lo stesso! Dove sbaglio? |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Fai molta ma molta confusione
creati un nuovo oggetto Random Codice:
Random rn = new Random(); Codice:
//posizione casuale dell'array int pos = rn.nexInt(array.lenght); Codice:
con questo verifichi i valori
if(array[index] == '0')
cambi il valore
else if array[index] == '9')
cambi il valore
else
//qui utilizzi il metodo suggerito da WarDuck
array[index] += generaN();
edit utilizzo Random perchè mi ci trovo meglio... niente di particolare però Ultima modifica di clockover : 25-03-2011 alle 18:39. |
|
|
|
|
|
#15 |
|
Member
Iscritto dal: Oct 2007
Messaggi: 185
|
un errore sta nel codice di gin e tonic
int x=(int)(Math.random()*2 - Math.random()*2) dà a volte -1, 0 e +1, non solo -1 e +1 Infatti il codice mio va bene quando compare +1 e -1, ridà lo stesso valore di input quando x è 0 (come m'è capitato quando mi sono lamentato). |
|
|
|
|
|
#16 |
|
Member
Iscritto dal: Oct 2007
Messaggi: 185
|
do{x=(int)(Math.random()*2 - Math.random()*2);}
while(x==0); Adesso da SOLO -1 e +1 |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
Ma scusa...fare qualcosa tipo:
Codice:
public String modifica(String s) {
int i = (int)(Math.random() * s.length());
char[] c = s.toCharArray();
if(c[i] == '0') c[i] = '1';
else if(c[i] == '9') c[i] = '8';
else c[i] += Math.random() > 0.5 ? 1 : -1;
return new String(c);
}
cya
__________________
iMac 27" 5K |
|
|
|
|
|
#19 |
|
Member
Iscritto dal: Oct 2007
Messaggi: 185
|
lo sò solo
Codice:
val < 0.5 ? -1 : 1; Sono stato istruito alla java 1.4, mai vista una cosa del genere "?" e" :"... |
|
|
|
|
|
#20 | |
|
Member
Iscritto dal: Jul 2004
Messaggi: 182
|
Quote:
sarebbe equivalente a: if (val < 0.5) return 1; else return -1; Ultima modifica di asrm : 26-03-2011 alle 01:52. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:36.




















