Torna indietro   Hardware Upgrade Forum > Software > Programmazione

ASUS ROG Swift OLED PG49WCD: quando QD-OLED e ultrawide si fondono
ASUS ROG Swift OLED PG49WCD: quando QD-OLED e ultrawide si fondono
Da ASUS un monitor particolare ma molto completo: principalmente indirizzato al videogiocatore, può essere sfruttato con efficacia anche per attività creative e di produzione multimediale
Dreame L10s Pro Ultra Heat: la pulizia di casa tutta sostanza
Dreame L10s Pro Ultra Heat: la pulizia di casa tutta sostanza
Il nuovo robot aspirapolvere domestico di Dreame abbina funzionalità complete a un moccio flottante che raggiunge al meglio gli angoli delle pareti. Un prodotto tutto in uno semplice da utilizzare ma molto efficace, in grado di rispondere al meglio alle necessità di pulizia della casa
HONOR Magic6 Pro: come funziona Magic Portal, il modo ''intelligente'' di condividere
HONOR Magic6 Pro: come funziona Magic Portal, il modo ''intelligente'' di condividere
HONOR ha introdotto con Magic6 Pro la funzione Magic Portal che consente, tramite intelligenza artificiale, di suggerire scorciatoie agli utenti in modo da permettere di passare e accedere facilmente ai servizi tra app e dispositivi con un semplice tocco. Vi spieghiamo qui come funziona
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: 3593
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: 3593
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: 3593
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: 2745
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: 2745
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


ASUS ROG Swift OLED PG49WCD: quando QD-OLED e ultrawide si fondono ASUS ROG Swift OLED PG49WCD: quando QD-OLED e ul...
Dreame L10s Pro Ultra Heat: la pulizia di casa tutta sostanza Dreame L10s Pro Ultra Heat: la pulizia di casa t...
HONOR Magic6 Pro: come funziona Magic Portal, il modo ''intelligente'' di condividere HONOR Magic6 Pro: come funziona Magic Portal, il...
L'innovazione richiede fiducia: Workday si propone come guida nell'era dell'IA L'innovazione richiede fiducia: Workday si propo...
Recensione HONOR Pad 9: ampio display e audio top per il tablet per l'intrattenimento Recensione HONOR Pad 9: ampio display e audio to...
IA: le imprese italiane sono in prima li...
Garmin Dash Cam 57: un'alleata perfetta ...
Elgato Facecam MK2: come rendere ancora ...
2 iRobot Roomba al prezzo più sco...
La tua connessione in fibra ottica potre...
Il controller DualSense per PS5 con un p...
Take-Two acquisisce Gearbox per 460 mili...
NVIDIA H100, H200 e Intel Gaudi 2 si sfi...
Lamborghini, nuovo logo e font, ora abbr...
Xbox Series X si veste di bianco, ma &eg...
La Porsche Boxster elettrica beccata in ...
L'iPad da 10,9" (Wi-Fi, 64GB) è sceso a ...
Dell, calo del mercato PC: licenziati 13...
Alfa Romeo Milano, scopriamo profilo e l...
Hisense vende un TV FHD 32 pollici con Q...
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:38.


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