|
|
|
![]() |
|
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 13: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: 12847
|
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 17: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 00:52. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:00.