Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
La facilità di installazione e la completa automazione di tutte le fasi di utilizzo, rendono questo prodotto l'ideale per molti clienti. Ecco com'è andata la nostra prova in anteprima
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
be quiet! debutta nel settore mouse da gaming con Dark Perk Ergo e Dark Perk Sym: due modelli gemelli per specifiche, con polling rate di 8.000 Hz anche in wireless, sensore PixArt PAW3950 da 32.000 DPI e autonomia dichiarata fino a 110 ore. Nel test, a 8.000 Hz si arriva a circa 30 ore reali, con ricarica completa in un'ora e mezza
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-03-2011, 08:40   #1
neosephiroth86
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
neosephiroth86 è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2011, 08:47   #2
Gin&&Tonic
Member
 
L'Avatar di Gin&&Tonic
 
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?
Gin&&Tonic è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2011, 08:52   #3
neosephiroth86
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à...
neosephiroth86 è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2011, 09:05   #4
Gin&&Tonic
Member
 
L'Avatar di Gin&&Tonic
 
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; }
Gin&&Tonic è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2011, 09:12   #5
neosephiroth86
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
neosephiroth86 è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2011, 09:20   #6
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Quote:
Originariamente inviato da neosephiroth86 Guarda i messaggi
esatto, devo controllare il valore del numero che devo modificare, perchè se è 0 diventerà per forza 1 e se è 9 per forza 8
dai mica è difficile

Codice:
if array[index] == '0'
    cambia
else if array[index] == '9'
    cambia
else
    cambia
edit
ma per caso devi gestire anche un eventuale overflow?
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2011, 09:21   #7
Gin&&Tonic
Member
 
L'Avatar di Gin&&Tonic
 
Iscritto dal: Aug 2010
Messaggi: 138
QUOTO CLOCKOVER
Gin&&Tonic è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2011, 14:05   #8
neosephiroth86
Member
 
Iscritto dal: Oct 2007
Messaggi: 185
ok ci siamo ma per mettere un valore casuale tra -1 e +1?
neosephiroth86 è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2011, 14:42   #9
Gin&&Tonic
Member
 
L'Avatar di Gin&&Tonic
 
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;
se vuoi un metodo va bee quello che ti ho consigliato prima

Ultima modifica di Gin&&Tonic : 25-03-2011 alle 14:46.
Gin&&Tonic è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2011, 14:44   #10
neosephiroth86
Member
 
Iscritto dal: Oct 2007
Messaggi: 185
ok grazie perfetto!
neosephiroth86 è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2011, 14:47   #11
Gin&&Tonic
Member
 
L'Avatar di Gin&&Tonic
 
Iscritto dal: Aug 2010
Messaggi: 138
Quote:
Originariamente inviato da neosephiroth86 Guarda i messaggi
ok grazie perfetto!
Nulla
Gin&&Tonic è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2011, 14:54   #12
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12936
Quote:
Originariamente inviato da Gin&&Tonic Guarda i messaggi
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; }
Forse è meglio fare una cosa del genere:
Codice:
int Genera()
{
    double val = Math.random();
    return val < 0.5 ? -1 : 1;
}
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2011, 18:12   #13
neosephiroth86
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     -------------");
	
	
	}
}
Mi da come output


03827593 vecchio ---------
03827593 nuovo -------------

Lo stesso! Dove sbaglio?
neosephiroth86 è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2011, 18:37   #14
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Fai molta ma molta confusione
creati un nuovo oggetto Random
Codice:
Random rn = new Random();
adesso passiamo alla posizione casuale
Codice:
//posizione casuale dell'array
int pos = rn.nexInt(array.lenght);
qui fai i cambiamenti

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();
e hai fatto

edit
utilizzo Random perchè mi ci trovo meglio... niente di particolare però

Ultima modifica di clockover : 25-03-2011 alle 18:39.
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2011, 19:19   #15
neosephiroth86
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).
neosephiroth86 è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2011, 19:28   #16
neosephiroth86
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
neosephiroth86 è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2011, 20:02   #17
Don[ITA]
Senior Member
 
L'Avatar di Don[ITA]
 
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
Don[ITA] è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2011, 20:26   #18
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12936
Mi chiedo perché non leggiate i reply, post 12:

Quote:
Originariamente inviato da WarDuck Guarda i messaggi
Forse è meglio fare una cosa del genere:
Codice:
int Genera()
{
    double val = Math.random();
    return val < 0.5 ? -1 : 1;
}
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2011, 20:35   #19
neosephiroth86
Member
 
Iscritto dal: Oct 2007
Messaggi: 185
lo sò solo
Codice:
val < 0.5 ? -1 : 1;
per me è arabo...
Sono stato istruito alla java 1.4, mai vista una cosa del genere "?" e" :"...
neosephiroth86 è offline   Rispondi citando il messaggio o parte di esso
Old 26-03-2011, 01:50   #20
asrm
Member
 
Iscritto dal: Jul 2004
Messaggi: 182
Quote:
Originariamente inviato da neosephiroth86 Guarda i messaggi
lo sò solo
Codice:
val < 0.5 ? -1 : 1;
per me è arabo...
Sono stato istruito alla java 1.4, mai vista una cosa del genere "?" e" :"...
return val < 0.5 ? 1 : -1;

sarebbe equivalente a:

if (val < 0.5) return 1;
else return -1;

Ultima modifica di asrm : 26-03-2011 alle 01:52.
asrm è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
Gli stipendi nel settore tech? Sono anco...
Problemi con la stampa 3D? Un prompt per...
Amazon Leo amplia i contratti con SpaceX...
Basta Purefication, il Giurì bloc...
LibreOffice 26.2 migliora prestazioni e ...
La Cina si prepara a un test della capsu...
La NASA rende note alcune informazioni a...
ASUS ExpertCenter PN54: mini PC Copilot+...
Geely userà una fabbrica europea ...
Leica Camera tratta la cessione della ma...
La nuova AMD non è più 'ec...
La Cina non è più la pecor...
Un SSD accanto alla GPU: la ricetta di Z...
Texas Instruments acquisisce Silicon Lab...
NVIDIA chiede l'archiviazione della caus...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:10.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v