Dubbio esercizio java (caratteri)

leonarth
ciao a tutti, ho dei dubbi sul seguente esercizio:

Data una stringa di caratteri alfanumerici verificare se tutti i caratteri in posizione d’indice dispari sono cifre.
Scrivere un’applicazione Java Cifre in cui è definito un metodo di classe boolean posizioneCifreDispari (String s) che, ricevendo come parametro una stringa (non nulla e non vuota) s, di caratteri alfanumerici, restituisce true se tutti i caratteri in posizione d’indice dispari sono cifre, false altrimenti. Scrivere un metodo di classe void testPosizione() per la verifica di correttezza.

per quanto riguarda il metodo boolean cifre dispari ho scritto il seguente codice:

public static boolean posizioneCifreDispari (String s){
int i;
int l;
l=s.length();
char c;
i=1;
while (i<=l-1) {
c=s.charAt(i);
if (('z' i=i+2;
return true;
}
else
return false;
}
}
}


ma quando lo eseguo mi da questo errore: <= cannot be applied to boolean,char

ma allora come faccio a verificare se il carattere della stringa è una cifra!? Sono 2 ore che sto sbattendo la testa ma non trovo una soluzione..

grazie mille!!!

Risposte
hamming_burst
Ciao,
ti do un aiutino, sei in Java, perciò ogni oggetto ha un Tipo ben preciso, ogni Tipo ha una classe associata con dei metodi.
Se usi un oggetto di tipo String, avrai un ventaglio di metodi da utilizzare. Se vuoi sapere se un oggetto String str è una cifra, scommetto che c'è un bel metodo già fatto che te lo dice.

prova:
 str.isDecimal() o str.isNumber()


cose del genere, ti ricordo che c'è un utile javadoc e se usi un IDE intelligente te le dice lui i metodi disponibili. Con questo prova a modificare il tui codice, è semplice.

Spero sia utile :-)

PS: metti il codice nei tag [code] così si mantiene l'indentazione

leonarth
"ham_burst":
Ciao,
ti do un aiutino, sei in Java, perciò ogni oggetto ha un Tipo ben preciso, ogni Tipo ha una classe associata con dei metodi.
Se usi un oggetto di tipo String, avrai un ventaglio di metodi da utilizzare. Se vuoi sapere se un oggetto String str è una cifra, scommetto che c'è un bel metodo già fatto che te lo dice.

prova:
 str.isDecimal() o str.isNumber()


cose del genere, ti ricordo che c'è un utile javadoc e se usi un IDE intelligente te le dice lui i metodi disponibili. Con questo prova a modificare il tui codice, è semplice.

Spero sia utile :-)

PS: metti il codice nei tag [code] così si mantiene l'indentazione


scusa ma io controllo ogni singolo carattere.. quindi controllo dei tipi char.. non string a quel punto.. no?

hamming_burst
si se fai un'analogia con il C, certo che è un char.
ma una stringa è composta da $n$ char.

Quello che fai te nel tuo codice, è un po' sporco, è un miscuglio di C e Java.

se usiamo il tuo codice, la stringa al carattere i-esimo, cioè str(i) avrà dei metodi per capire se è una cifra, cioè
str.charAt(i).isDecimal()


devi vedere te qual'è il metodo corretto, non lo ricordo io.
Comunque ci sono altri modo per fare questo genere di iterazioni (iterator e Collection gli hai già affrontati?), ma visto che ci sono i metodi di java già pronti perchè non usarli? :-)

leonarth
"ham_burst":
si se fai un'analogia con il C, certo che è un char.
ma una stringa è composta da $n$ char.

Quello che fai te nel tuo codice, è un po' sporco, è un miscuglio di C e Java.

se usiamo il tuo codice, la stringa al carattere i-esimo, cioè str(i) avrà dei metodi per capire se è una cifra, cioè
str.charAt(i).isDecimal()


devi vedere te qual'è il metodo corretto, non lo ricordo io.
Comunque ci sono altri modo per fare questo genere di iterazioni (iterator e Collection gli hai già affrontati?), ma visto che ci sono i metodi di java già pronti perchè non usarli? :-)


[/code]public static boolean posizioneCifreDispari (String s){
int i;
int l;
l=s.length();
char c;
i=1;


while (i<=l-1) {
c=s.charAt(i);
if (c.isDecimal()){

i=i+2;
return true;
}
else
return false;
}
}}
[/code]


ps perchè la tag code non funge..?? sono impedito.. :(

hamming_burst
sicuro che ti funziona il codice?
ad occhio direi di no, rileggi cosa ti dice l'esercizio:

Data una stringa di caratteri alfanumerici verificare se tutti i caratteri in posizione d’indice dispari sono cifre.
Scrivere un’applicazione Java Cifre in cui è definito un metodo di classe boolean posizioneCifreDispari (String s) che, ricevendo come parametro una stringa (non nulla e non vuota) s, di caratteri alfanumerici, restituisce true se tutti i caratteri in posizione d’indice dispari sono cifre, false altrimenti. Scrivere un metodo di classe void testPosizione() per la verifica di correttezza.


ti ho messo in neretto la parte che il codice non fa, il tuo codice resituisce true appena legge in una posizione dispari un numero. Te devi restituire true ssse TUTTI i caratteri in posizione dispari sono numeri.
Per correggere pensa a dove devi resituire true.

PS: per i tag devi inserirli in [code] e [code] con / (non lo scrivo se no mi si tagga anche a me il testo)

spero sia chiaro :-)

xsl
Se per cifre intendi quelle comprese tra 0 e 9, allora l'esempio seguente dovrebbe soddisfarti
/**
 * @(#)Tester.java
 *
 *
 * @author xsl
 * @version 1.00 2011/1/15
 */

public class Tester {
	
    /**
     * Creates a new instance of <code>Tester</code>.
     */  
    public Tester() {
    }
    
    public static boolean posizioneCifreDispari(String s){
    	if( s == null )
    		throw new IllegalArgumentException("The argument s is null.");
    	if( s.length() == 0 )
    		throw new IllegalArgumentException("The argument s has length = 0.");
    		
    	int i = 1;
    	while( i < s.length() ){
    		if( !isNumber(s.substring(i,i+1)) )
    			return false;
    		i += 2;
    	}
    	return true;
    }
    
    private static boolean isNumber(String sub){
    	try{
    		Integer.parseInt(sub);
    	}catch(NumberFormatException e){
    		return false;
    	}
    	return true;
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        System.out.println( Tester.posizioneCifreDispari("a1b2c3") );
       	System.out.println( Tester.posizioneCifreDispari("1a2b3c") );
    }
}  

oppure senza la definizione della funzione isNumber, ancora più banalmente puoi fare questo controllo nel while:
! Character.isDigit( s.charAt(i) )

Il metodo testPosizione a che dovrebbe servire?

leonarth
grazie mille ma ho risolto in un altro modo:

public static boolean posizioneCifreDispari (String s){
boolean vr;
int i;
vr=true;

for(i=1; i<s.length() && vr; i+=2){
           if(s.charAt(i)>='0' && s.charAt(i)<='9'); // istruzione vuota
           else
           vr=false;
           }
return vr;
}



il secondo metodo che devo creare è il testPosizione, nella consegna dell'esercizio c'è scritto:
scrivere un metodo di classe void testPosizione() per la verifica di correttezza. Nel metodo ciascuno degli insiemi di dati di ingresso usato per la verifica deve essere commentato nel codice. Ad esempio:
/* Stringa con una sola cifra */
System.out.println(posizioneCifreDispari ("1a”)+ ” = false”);

non capisco cosa devo fare.. semplicemente questo? :


 public static void testPosizione(){
	System.out.println(posizioneCifreDispari("1a"));         /* Stringa con una sola cifra nella posizione iniziale */ 
	System.out.println(posizioneCifreDispari("12345"));    /* Stringa composta da cifre */ 
	System.out.println(posizioneCifreDispari("a1cd3"));    /* Stringa con una cifra nella posizione iniziale e una in posizione pari */ 
}




se è questo che devo fare, come faccio dopo a verificarlo una volta che avvio il programma? cioè a questo punto il programma completo dovrebbe essere questo, e non dà errori:

import fiji.io.*;
	class Cifre {
		public static void main (String [] args){
		String s;
		int i;
		int l;
		boolean b;
		s=Lettore.in.leggiLinea();
		l=s.length();
		posizioneCifreDispari(s);
		System.out.println(posizioneCifreDispari(s));
		}

public static boolean posizioneCifreDispari (String s){
	boolean vr;
	int i;
	vr=true;
	for(i=1; i<s.length() && vr; i+=2){
		if(s.charAt(i)>='0' && s.charAt(i)<='9'); // istruzione vuota
		else
		vr=false;
		}
	return vr;
	}



public static void testPosizione(){
	System.out.println(posizioneCifreDispari("1a"));
	System.out.println(posizioneCifreDispari("12345"));
	System.out.println(posizioneCifreDispari("a1cd3"));

}

}




se lo avvio, mi fa inserire una stringa da tastiera e mi dice true o false a seconda se ci sono delle cifre nelle posizioni dispari. esattamente ciò che volevamo. Ma il metodo testPosizione che verifica la correttezza del programma come faccio a sfruttarlo? Come devo cambiare il codice per vedere i "true" e i "false" relativi alle stringhe del metodo testPosizione??

grazie mille a tutti!

xsl
Allora dovrebbe trattarsi di un metodo che controlla il dato preso in input?
Se è così devi controllare che la stringa in input abbia determinate caratteristiche..

leonarth
fatto!! funziona tutto alla grande dovrebbe essere finito.. il testposizione lo invoco subito dopo il main e funziona ;) ecco il codice

import fiji.io.*;
	class Cifre {
		public static void main (String [] args){
		testPosizione(); 										/* test verifica di correttezza */
		}

public static boolean posizioneCifreDispari (String s){          /* pre condizione : s non vuota */
	boolean vr;
	int i;
	vr=true;													/* imposto il valore di ritorno booleano a true */
	for(i=1; i<s.length() && vr; i+=2){
		if(s.charAt(i)>='0' && s.charAt(i)<='9'); 				/* se il carattere è compreso tra 0 e 9, vr rimane true */
		else
		vr=false;												/* altrimenti diventa false */
		}
	return vr;
	}



public static void testPosizione(){
	System.out.println(posizioneCifreDispari ("1a"));    			/* Stringa con una sola cifra nella posizione iniziale ----- restituisce false */
	System.out.println(posizioneCifreDispari("12345"));				/* Stringa composta da cifre ----- restituisce true */
	System.out.println(posizioneCifreDispari("a1cd3"));				/* Stringa con una cifra nella posizione iniziale e una in posizione pari ----- restituisce false */
	System.out.println(posizioneCifreDispari("abcdef"));			/* Stringa composta da tutte lettere -----  restituisce false */
	System.out.println(posizioneCifreDispari("a1b4m5l3n7"));		/* Stringa composta da lettere e numeri alternati (numeri in posizioni dispari) -----  restituisce true */


}

}


;) grazie mille a tutti per l'aiuto!!!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.