Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Per diversi giorni il Galaxy S26 Ultra di Samsung è stato il nostro compagno di vita. Oltre alle conferme del colosso coreano come la qualità del display e una suite AI senza rivali, arriva il Privacy Display, un unicum nel mondo smartphone. Ci sono ancora alcuni gap che non sono riusciti a colmare lato batteria e fotocamera, seppur con alcuni miglioramenti.
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Abbiamo provato per voi il nuovo DLC lanciato a sorpresa da Blizzard per Diablo II: Resurrected e quella che segue è una disamina dei nuovi contenuti che abbiamo avuto modo di sperimentare nel corso delle nostre sessioni di gioco, con particolare riguardo per la nuova classe dello Stregone
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Siamo tornati nel parco tecnologico di Trieste per il kick-off del programma che mette a disposizione di cinque startup le infrastrutture di ricerca, dal sincrotrone Elettra ai laboratori di genomica e HPC. Roberto Pillon racconta il modello e la visione
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-01-2021, 15:11   #1
iannez
Junior Member
 
Iscritto dal: Jan 2021
Messaggi: 17
programmazione in java di un automa

Buongiorno a tutti, ho un problema con il seguente codice che deve riconoscere un linguaggio dell'alfabeto{/,*,a}. Ogni stringa inserita va bene ma quando inserisco "/**/" oppure "/*a*/" mi da errore, inserendo una system.out ho notato che in questi casi il carattere '/' lo legge come '\' e se annullo il confronto mi cambia anche gli altri caratteri. Qualcuno può aiutarmi?


Codice:
public class Esercizio{
	
	public static boolean scan(String s){
		
		int state = 0;
		int i = 0;
		
		while(state >= 0 && i < s.length()){
			
			final char ch = s.charAt(i++);
			
			System.out.println("ciclo " +i+ " carattere " +ch+ " stato " +state);
			
			switch(state){
				
				case 0:
				    if(ch == '/')
					    state = 1;
				    else 
					    state = -1;
					break;
					
			    case 1:
				    if(ch == '*')
					    state = 2;
				    else 
					    state = -1;
				    break;
					
			    case 2:
				    if(ch == 'a')
					    state = 2;
					else if(ch == '/')
					    state = 3;
					else if(ch == '*')
					    state = 4;
					else
    				    state = -1;
					break;
				
				case 3:
				    if(ch == '/')
					    state = 3;
					else if(ch == 'a')
					    state = 2;
					else if(ch == '*')
					    state = 4;
					else 
					    state = -1;
					break;
				
				case 4:
				    if(ch == '*')
					    state = 4;
					else if(ch == 'a')
					    state = 2;
					else if(ch == '/')
					    state = 5;
					else 
					    state = -1;
					break;
					
				case 5:
				    if(ch == '*' || ch == '/' || ch == 'a')
					    state = -1;
					break;
			}
		}
		return state == 5;
	}
	
	public static void main (String[] args){
		
		System.out.println(scan(args[0]) ? "OK" : "NOPE");
	}
}
Ho provato ad usare un compilatore online e mi da sempre i risultati giusto mentre da pc mi da sempre errore, qualcuno sa dirmi perché?

Ultima modifica di iannez : 20-01-2021 alle 15:39.
iannez è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2021, 09:16   #2
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
non ho un compilatore java per provare, ma hai provato a sostituire / con // oppure in luogo del simbolo mettere 47 ?????
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2021, 14:09   #3
iannez
Junior Member
 
Iscritto dal: Jan 2021
Messaggi: 17
Si ho provato a confrontare i caratteri con il loro corrispettivo ascii e mi da sempre errore sulle stringhe, ma solo su “/**/“ oppure “/*a*/“
iannez è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2021, 14:28   #4
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
Codice:
ase 1:
				    if(ch == '*')
					    state = 2;
				    else 
					    state = -1;
				    break;
					
			    case 2:
				    if(ch == 'a')
					    state = 2;
un dubbio su quell'assegnamento, setti state = 2 in due casi diversi: è corretto?

Ultima modifica di misterx : 21-01-2021 alle 17:19.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2021, 15:25   #5
iannez
Junior Member
 
Iscritto dal: Jan 2021
Messaggi: 17
Si esattamente, perché dopo aver letto i caratteri di apertura se comprare una “a” non va avanti. Almeno io l’ho pensata in questo modo
iannez è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2021, 17:21   #6
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
chiaramente hai provato step by step giusto?
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2021, 17:28   #7
iannez
Junior Member
 
Iscritto dal: Jan 2021
Messaggi: 17
Si e ho anche provato a togliere l’errore forzatamente e fargli stampare la stringa che legge ma risulta completamente diversa da quella inserita
iannez è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2021, 18:10   #8
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2788
Quando dici che "ti da errore" cosa intendi? Riporta tutte le informazioni che hai, così chi vuole aiutarti non deve investirci troppo tempo per provare a darti una mano.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2021, 19:04   #9
Lampo89
Member
 
L'Avatar di Lampo89
 
Iscritto dal: Dec 2006
Messaggi: 33
Per capire dove sia il problema, forse potrebbe essere utile avere la linea di comando con cui invochi java sul tuo pc - o la configurazione di run dell'IDE che usi
Lampo89 è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2021, 22:12   #10
iannez
Junior Member
 
Iscritto dal: Jan 2021
Messaggi: 17
Codice:
Microsoft Windows [Versione 10.0.19041.746]
(c) 2020 Microsoft Corporation. Tutti i diritti sono riservati.

C:\Users\gioel\OneDrive\Desktop\LFT laboratorio\esercizio 1>javac Es1_9.java

C:\Users\gioel\OneDrive\Desktop\LFT laboratorio\esercizio 1>java Es1_9 "/*aa*/
ciclo 1 carattere / stato 0
ciclo 2 carattere * stato 1
ciclo 3 carattere a stato 2
ciclo 4 carattere a stato 2
ciclo 5 carattere * stato 2
ciclo 6 carattere / stato 4
OK

C:\Users\gioel\OneDrive\Desktop\LFT laboratorio\esercizio 1>java Es1_9 "/*a*/
ciclo 1 carattere \ stato 0
NOPE

C:\Users\gioel\OneDrive\Desktop\LFT laboratorio\esercizio 1>java Es1_9 "/**/
ciclo 1 carattere \ stato 0
NOPE

C:\Users\gioel\OneDrive\Desktop\LFT laboratorio\esercizio 1>
Questo è come io avvio il programma dal prompt dei comandi e anche il risultato che mi restituisce
iannez è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2021, 22:42   #11
Lampo89
Member
 
L'Avatar di Lampo89
 
Iscritto dal: Dec 2006
Messaggi: 33
Quote:
Originariamente inviato da iannez Guarda i messaggi
Codice:
Microsoft Windows [Versione 10.0.19041.746]
(c) 2020 Microsoft Corporation. Tutti i diritti sono riservati.

C:\Users\gioel\OneDrive\Desktop\LFT laboratorio\esercizio 1>javac Es1_9.java

C:\Users\gioel\OneDrive\Desktop\LFT laboratorio\esercizio 1>java Es1_9 "/*aa*/
ciclo 1 carattere / stato 0
ciclo 2 carattere * stato 1
ciclo 3 carattere a stato 2
ciclo 4 carattere a stato 2
ciclo 5 carattere * stato 2
ciclo 6 carattere / stato 4
OK

C:\Users\gioel\OneDrive\Desktop\LFT laboratorio\esercizio 1>java Es1_9 "/*a*/
ciclo 1 carattere \ stato 0
NOPE

C:\Users\gioel\OneDrive\Desktop\LFT laboratorio\esercizio 1>java Es1_9 "/**/
ciclo 1 carattere \ stato 0
NOPE

C:\Users\gioel\OneDrive\Desktop\LFT laboratorio\esercizio 1>
Questo è come io avvio il programma dal prompt dei comandi e anche il risultato che mi restituisce
Forse non c'entra nulla ma ... la virgoletta finale mancante " è un refuso di copia e incolla?
Non saprei aiutarti, mi sembra un problema assurdo ... mai visto problemi simili nel passaggio di parametri da parte della JVM. E tipicamente, quando le cose che vedi sono assurde è perché c'è sempre un problema banale che non si vede

Ultima modifica di Lampo89 : 21-01-2021 alle 22:44.
Lampo89 è offline   Rispondi citando il messaggio o parte di esso
Old 21-01-2021, 23:37   #12
iannez
Junior Member
 
Iscritto dal: Jan 2021
Messaggi: 17
Le virgolette non so perché non le ha copiate ma posso assicurare che le ho messe anche perché il primo esempio è corretto, comunque sto uscendo di testa perché proprio non riesco a capire sarà un problema del compilatore o di com’è installato?
iannez è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2021, 00:17   #13
Lampo89
Member
 
L'Avatar di Lampo89
 
Iscritto dal: Dec 2006
Messaggi: 33
Quote:
Originariamente inviato da iannez Guarda i messaggi
Le virgolette non so perché non le ha copiate ma posso assicurare che le ho messe anche perché il primo esempio è corretto, comunque sto uscendo di testa perché proprio non riesco a capire sarà un problema del compilatore o di com’è installato?
Ho trovato un problema molto simile a quello che hai segnalato:

https://bugs.java.com/bugdatabase/vi...bug_id=8154036
https://bugs.java.com/bugdatabase/vi...id=JDK-8131329

Dai un occhio alla versione del JRE: tenterei l'aggiornamento - e per sicurezza anche la JDK aggiornata.

edit: JDK-8131329 : JVM silently expands command line arguments before invoking "main()" è marcato come "not an issue" ci sono dei commenti interessanti a riguardo che dovrebbero chiarire il tuo problema.

Ultima modifica di Lampo89 : 22-01-2021 alle 00:31.
Lampo89 è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2021, 13:42   #14
iannez
Junior Member
 
Iscritto dal: Jan 2021
Messaggi: 17
Va bene grazie mille
iannez è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2021, 15:36   #15
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2788
Hai provato a stampare args[0] per vedere cosa riceve il programma? Ancora meglio proverei a stampare la lunghezza di args e tutti i valori all'interno perché probabilmente è una questione di passaggio di argomenti che non avviene correttamente.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2021, 22:40   #16
iannez
Junior Member
 
Iscritto dal: Jan 2021
Messaggi: 17
Ci ho provato è appunto nelle stringhe di lunghezza inferiore di /*aa*/ il carattere non viene letto correttamente
iannez è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2021, 23:01   #17
Lampo89
Member
 
L'Avatar di Lampo89
 
Iscritto dal: Dec 2006
Messaggi: 33
Quote:
Originariamente inviato da iannez Guarda i messaggi
Ci ho provato è appunto nelle stringhe di lunghezza inferiore di /*aa*/ il carattere non viene letto correttamente
Potresti incollare qui il contenuto di argv[0] e in generale dell'intero vettore di parametri? Quello che ti è stato dato mi sembra un suggerimento valido, così almeno si capisce come viene espanso il '*'
Lampo89 è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2021, 23:21   #18
Lampo89
Member
 
L'Avatar di Lampo89
 
Iscritto dal: Dec 2006
Messaggi: 33
Usando il tuo stesso tuo codice, aggiungendo la stampa del vettore dei parametri. Due esecuzioni, a parità di bytecode (cioé, ho compilato solo una volta e lanciato nei due ambienti diversi). Provato il tutto con JDK e JRE versione 8, update 261 (se non vado errato)

esecuzione sotto powershell:

Quote:
PS C:\Users\lmp\Desktop\tmp> java Esercizio "/*aa*/"
ciclo 1carattere / stato 0
ciclo 2carattere * stato 1
ciclo 3carattere a stato 2
ciclo 4carattere a stato 2
ciclo 5carattere * stato 2
ciclo 6carattere / stato 4
OK
PS C:\Users\lmp\Desktop\tmp> java Esercizio "/*a*/"
ciclo 1carattere \ stato 0
NOPE
PS C:\Users\lmp\Desktop\tmp> java Esercizio "/*a*/"
[\$WinREAgent, \apache-maven-3.6.3, \Documents and Settings, \DumpStack.log.tmp, \pagefile.sys, \Program Files, \Program Files (x86), \ProgramData, \swapfile.sys, \System Volume Information]
ciclo 1carattere \ stato 0
NOPE
esecuzione sotto cmd:
Quote:
C:\Users\lmp\Desktop\tmp>java Esercizio "/*aa*/"
[/*aa*/]
ciclo 1carattere / stato 0
ciclo 2carattere * stato 1
ciclo 3carattere a stato 2
ciclo 4carattere a stato 2
ciclo 5carattere * stato 2
ciclo 6carattere / stato 4
OK

C:\Users\lmp\Desktop\tmp>java Esercizio "/*a*/"
[/*a*/]
ciclo 1carattere / stato 0
ciclo 2carattere * stato 1
ciclo 3carattere a stato 2
ciclo 4carattere * stato 2
ciclo 5carattere / stato 4
OK
Powershell mi espande in malo modo la wildcard "*". Provando invece:

Quote:
PS C:\Users\lmp\Desktop\tmp> java Esercizio '"/*a*/"'
[/*a*/]
ciclo 1carattere / stato 0
ciclo 2carattere * stato 1
ciclo 3carattere a stato 2
ciclo 4carattere * stato 2
ciclo 5carattere / stato 4
OK
Ora, da quello che hai scritto sembra che tu stia già utilizzando cmd; nel dubbio proverei comunque a stampare i parametri a video come suggerito prima e a provare a lanciare il programma inserendo la stringa "/*a*/" all'interno dei singoli apici: '"/*a*/"'
Prova a dare un occhio anche qua:
https://stackoverflow.com/questions/...-in-powershell

a meno che tu non l'abbia già fatto, eviterei a questo punto l'update di java ...

Ultima modifica di Lampo89 : 22-01-2021 alle 23:37.
Lampo89 è offline   Rispondi citando il messaggio o parte di esso
Old 23-01-2021, 11:52   #19
iannez
Junior Member
 
Iscritto dal: Jan 2021
Messaggi: 17
Si io compilo usando cmp, L’update di Java l’ho fatto perché pensavo di perde evitare l’errore grazie al consiglio di alcuni miei compagni di corso. Purtroppo anche tra apici continua a darmi lo stesso errore. La cosa strana è che nei compilatori online funziona tutto perfettamente
iannez è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo HP OMEN MAX 16 con RTX 5080: potenza da desktop ...
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
AWS e Cerebras uniscono le forze: nuova ...
Windows 11: accesso al drive C: bloccato...
BYD pronta a comprare un marchio storico...
Windows 11 si prepara ai monitor oltre i...
Apple avrebbe fissato un target di vendi...
Ultimi giorni per sfruttare le Offerte d...
I migliori smartphone in offerta ora su ...
Le migliori TV delle Offerte di Primaver...
Uno dei robot più avanzati del 2025 crol...
Robot aspirapolvere con stazione automat...
Il nuovo top di gamma compatto di OPPO n...
Nilox aggiorna la sua gamma di fat e-bik...
Meta valuta tagli fino al 20% della forz...
MacBook Neo sorprende iFixit: 'Non vedev...
Venus Optics presenta due nuovi obiettiv...
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: 15:19.


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