Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [Java] Restituire il nome di una variabile contenuta come valore di un array!

    Salve sono un nuovo utente.
    Mi sono avventurato in Java per passione e hobby, dopo buone esperienze con Flash e ActionScript. Come primo approccio con la programmazione in Java uso Enterprise Indigo (Version: Indigo Service Release 2 Build id: 20120216-1857) su Windows7 64bit.

    Esordisco nel forum per chiedere il Vostro aiuto riguardo un problemino che non riesco a risolvere... vado ad esporlo.

    Ho creato una Classe readString che dovrebbe leggermi un "archivio" di stringhe e restituirle, vi posto il codice:

    codice:
    public class readString {
    	
    	static String str1 = "testo qualsiasi";
    	static String str2 = "altro testo";
    	static String str3 = "qui quo qua";
    	static String str4 = "bla bla bla";
    	
    	public String[] leggiStringhe (String X) {
    		
    		System.out.println(X);
    		
    		String strArray[] = X.split("\\|");
    		String returnArray[] = new String[strArray.length];
    		for (int i=0; i<strArray.length; i++) {
    			
    			System.out.println(strArray.length+" > "+strArray[i]);
    			
    			returnArray[i] = strArray[i]; // *** QUI E' IL PROBLEMA!!!! ***
    		}
    	    return returnArray;
    	}
    }
    Il metodo viene così chiamato dalla main:
    codice:
    readString primaIstanza;
    primaIstanza = new readString();
    String[] A = primaIstanza.leggiStringhe("str1|str2|str4"); //CHIAMO IL METODO PASSANDO I VALORI
    System.out.println(A[0]+" <> "+A[1]+" <> "+A[2]);
    Cioè in base alle stringhe che mi servono invio il nome delle variabili che le "contengono", nell'esempio la str1, la str2 e la str4. Il codice funziona bene, ovviamente con le imperfezioni di un neofita di Java come me, ma il problema è quando devo assegnare all'Array di ritorno (returnArray ) il valore di str1, str2 etc dove ho evidenziato con l'appunto QUI E' ILPROBLEMA!!!!. Cioè come posso assegnare a returnArray[i] il valore di str1 che sarebbe "testo qualsiasi" e non il valore di strArray[i] che è appunto str1 o str2 etc!?
    Spero di aver spiegato bene il problema.

    Grazie a Tutti per l'attenzione,
    porgo l'occasione per augurarVi Buona Pasqua.

  2. #2
    Chiedo scusa, ho sbagliato la sezione del forum.

  3. #3
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Non ho capito la sinopsi del metodo: cosa deve fare, qual'è il suo scopo?

  4. #4
    Nella istanza (primaIstanza) chiedo di leggere le stringhe (esempio) str1, str2 e str4 nella Classe ReadString, dove si trovano un numero indefinito di stringhe e il loro valore. Il problema è che non riesco ad assegnare il valore delle variabili str1, str2 etc in tale Classe, come ho spiegato nel passaggio "// *** QUI E' IL PROBLEMA!!!! ***", perchè devo assegnare a returnArray[i] il valore della variabile con il nome uguale al valore della variabile strArray[i] e non il valore di strArray[i].... se provi il codice ti rendi conto del problema.
    codice:
    public class readString {
    	
    	static String str1 = "testo qualsiasi";
    	static String str2 = "altro testo";
    	static String str3 = "qui quo qua";
    	static String str4 = "bla bla bla";
    	
    	public String[] leggiStringhe (String X) {
    		
    		System.out.println(X);
    		
    		String strArray[] = X.split("\\|");
    		String returnArray[] = new String[strArray.length];
    		for (int i=0; i<strArray.length; i++) {
    			
    			System.out.println(strArray.length+" > "+strArray[i]);
    			
    			returnArray[i] = strArray[i]; // *** QUI E' IL PROBLEMA!!!! ***
    		}
    	    return returnArray;
    	}
    }
    Grazie per l'attenzione, Buona Pasqua.

  5. #5
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Cioè non sai come comparare due stringhe?
    Basta usare il metodo compareTo.
    http://docs.oracle.com/javase/6/docs...html#compareTo

  6. #6
    No no! mmh non so come farmi capire!! Ci provo.
    In pratica:
    codice:
    String X = "è una bella giornata";
    
    String Y = "X";
    
    returnString = Y;
    
    System.out.println(Y);
    ....avrò stampato a video: X
    E sin qui tutto ok!!
    Ma se io voglio che a returnString venga assegnato il valore della variabile il cui nome è assegnato a Y, cioè il valore di X!? Come faccio? Tenendo conto che non posso scrivere direttamente:
    codice:
     returnString = X;

  7. #7
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    vediamo se ho capito
    la stringa di ingresso contiene i nomi delle variabili interne (le strX) i cui valori dovrebbero poi essere assegnati a returnUrl.

    Servirebbe nel linguaggio un modo per poter richiamare programmaticamente le variabili dato il loro nome e questo (e altre cose simili) lo si fa con la reflection.

    Visto che dici di essere alle prime armi ti suggerisco di non avventurarti per ora nella reflection (la quale, in realtà non è fatta per risolvere questi problemi) e di sforzarti a trovare una soluzione diversa. Per esempio potresti trasformare le strX in un array (o un altro tipo di collection) e passare al metodo gli indici di questo array (anche con la formula della stringa da splittare) invece che i nomi delle variabili

  8. #8
    Si giusto.... infatti sto cambiando il codice. Invece di usare tante stringhe strX, uso un unico array str[], nella stringa con cui passavo i nomi delle stringhe da leggere concatenati con "|", ora passo gli indici dell'array che mi servono, esempio "3|45|23".
    Ecco come...
    Classe MAIN:
    codice:
    readString primaIstanza;
    primaIstanza = new readString();
    String[] A = primaIstanza.leggiStr("2|4|5"); //CHIAMO IL METODO PASSANDO I VALORI
    System.out.println(A[0]+" <> "+A[1]+" <> "+A[2]);
    E questo la Classe ReadString:
    codice:
    	
    	// ELENCO VALORI
    	// ### STRINGHE ###	
    	static String[] str = {
    /* #0 */	"str",		
    /* #1 */	"AVVISO DI TABELLA VUOTA!",
    /* #2 */	"IL DATABASE DEVE ESSERE INIZIALIZZATO PREMI OK PER INIZIARE!!",
    /* #3 */	"sdfsdfsf",
    /* #4 */	"A",
    /* #5 */	"B",
    /* #6 */	"C"
    	             };
    
    public String[] leggiStr (String X) {
            String[] strArray = X.split("\\|");
    	String returnArray[] = new String[strArray.length]; //ARRAY di ritorno
    		for (int i=0; i<strArray.length; i++) {
    		     returnArray[i] = str[strArray[i]];
    		}		
            return returnArray;
    	}
    }
    Però mi da errore qua:
    codice:
    returnArray[i] = str[strArray[i]];
    perché strArray[i] non lo prende come indice perchè è di tipo String!!!!!
    Come faccio!?

  9. #9
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    gia va meglio.
    Integer.parseInt(strArray[i]); trasforma la stringa in un numero ma lancia un eccezione se la stringa contiene caratteri che non siano delle cifre.

  10. #10
    Grazie infinite.... funziona a dovere.
    Ecco il codice Class ReadString riscritto con tre metodi di lettura per i tre Array di stringhe, str, log o set .....
    codice:
    public class readString {
    	
    	// ELENCO VALORI
    	// ### STRINGHE ###	
    	static String[] str = {
    /* #0 */	"str",		
    /* #1 */	"AVVISO DI TABELLA VUOTA!",
    /* #2 */	"IL DATABASE DEVE ESSERE INIZIALIZZATO PREMI OK PER INIZIARE!!",
    /* #3 */	"sdfsdfsf",
    /* #4 */	"A",
    /* #5 */	"B",
    /* #6 */	"C"
    	};
    	// @@@ LOG @@@
    	static String[] log = {	
    /* #0 */	"\r\n### -> chiamata al database, valori: archivioDB e Stazione",
    /* #1 */	"\r\n### -> chiamata al database, valori: archivioDB e personaleStazione",
    /* #2 */	"",
    /* #3 */	"",
    /* #4 */	"",
    /* #5 */	""
    	};
    	// *** SETTAGGI ***
    	static String[] set = {	
    /* #0 */	"red",
    /* #1 */	"blu",
    /* #2 */	"CENTER",
    /* #3 */	"LEFT",
    /* #4 */	"",
    /* #5 */	""
    	};
    	
    	public String[] leggiStr (String X) {
    		String[] strArray = X.split("\\|");
    		String returnArray[] = new String[strArray.length]; //ARRAY di ritorno
    			for (int i=0; i<strArray.length; i++) {
    				returnArray[i] = str[Integer.parseInt(strArray[i])];
    			}		
    	    return returnArray;
    	}
    	
    	public String[] leggiLog (String X) {
    		String[] logArray = X.split("\\|");
    		String returnArray[] = new String[logArray.length]; //ARRAY di ritorno
    			for (int i=0; i<logArray.length; i++) {
    				returnArray[i] = log[Integer.parseInt(logArray[i])];
    			}
    			return returnArray;
    	}
    	
    	public String[] leggiSet (String X) {
    		String[] setArray = X.split("\\|");
    		String returnArray[] = new String[setArray.length]; //ARRAY di ritorno
    			for (int i=0; i<setArray.length; i++) {	
    				returnArray[i] = set[Integer.parseInt(setArray[i])];
    			}
    			return returnArray;
    	}
    }
    BUona Pasqua

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.