Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    123

    problema con file + curiosità array

    Ho il seguente file :
    otto quattro nove stop
    due tre stop
    sette uno sette stop

    e devo riuscire ad ottenere 849, 23, 717

    tratto nel solito modo come se fosse un file di testo.
    poi pensavo di utilizzare stringtokenizer con lo spazio e la parola stop...
    però non riesco a trovare il modo per trasformare le lettere in cifra...

    P.S. altro piccolo problemino...
    ho array con n elementi..per esempio 2 1 4 1 7 2 9 0 0 7 3 e devo ottenere in output
    2 1 4 7 9 0 3, cioè mi elimina i doppi e shifta a sinistra i numeri...ho provato con vari annidamenti di cicli for ma niente da fare...per caso esiste un metodo più veloce?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: problema con file + curiosità array

    Originariamente inviato da bobo24
    non riesco a trovare il modo per trasformare le lettere in cifra...
    O fai la classica "catena" di if:

    codice:
    if (token.equals("zero")) {
        valore = 0;
    } else if (token.equals("uno")) {
        valore = 1;
    .....
    Oppure pre-costruisci una "mappa" (es. HashMap / Hashtable) che associa un String (il token) ad un Integer con il valore.

    Originariamente inviato da bobo24
    ho array con n elementi..per esempio 2 1 4 1 7 2 9 0 0 7 3 e devo ottenere in output
    2 1 4 7 9 0 3, cioè mi elimina i doppi e shifta a sinistra i numeri...ho provato con vari annidamenti di cicli for ma niente da fare...per caso esiste un metodo più veloce?
    Prima questione: devi anche creare un nuovo array della "giusta" (più piccola) dimensione? Perché la nuova dimensione non la sai a priori.
    Seconda questione: per sapere se è già presente o riscansioni ogni volta per vedere se esiste il valore, oppure metti i valori man mano in un "set" (es. HashSet)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    123
    i set e mappe non li ho ancora studiati...penso che però li vedrò a breve con il mio prof....
    quindi per quel che riguarda l'array devo usare tanti for, giusto?

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    devi implementare tu la funzione per fare lo shift, in maniera brutale puoi memorizzare l'ultimo valore su una variabile temp, spostare tutto di una posizione, inserirlo alla position 0 (ripetuto n volte) oppure usare appunto collections

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    123
    L'ho fatto nel seguente modo, cioè ho messo questo frammento di codice all'interno del try...ma in output ho tutti -1 e a lato di ogni if mi dice che tipo incompatibile.
    Cosa dite? ho intrapreso una strada sbagliata?

    Scanner sc = new Scanner(new FileReader("prova.txt"));
    StringTokenizer st;
    int valore=-1;
    while(sc.hasNext())
    {
    String linea = sc.nextLine();
    st=new StringTokenizer(linea,"stop, ");
    if (st.equals("zero"))
    {
    valore = 0;
    }
    else if (st.equals("uno"))
    {
    valore = 1;
    }
    ...........

    System.out.println(valore);
    }
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Originariamente inviato da bobo24
    i set e mappe non li ho ancora studiati...penso che però li vedrò a breve con il mio prof....
    quindi per quel che riguarda l'array devo usare tanti for, giusto?
    in attesa di Collections, potresti anche scriverti un metodo che riceva una String e ritorni un int dal confronto con un array di String opportunamente inizializzato:

    codice:
    // guarda caso...
    String[] testuale = new String[] {"zero", "uno", "due",..."nove"};
    il metodo avrà un ciclo for sulla lunghezza dell'array e ritornerà l'indice i per cui il tuo pivot è uguale all'elemento i-esimo dell'array

    codice:
    public int traduci(String pivot) {
      for (int i = 0; i < testuale.length; i++) {
        if (testuale[i].equals(pivot)) { //magari con ignoreCase
          return i;
        }
      }
      return -1; //formato non valido, vedi tu che fare
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    123
    Allora, il metodo direi che va bene :

    public static int traduci(String pivot)
    {
    String[] testuale = new String[] {"zero", "uno",..,"nove}";
    for (int i = 0; i < testuale.length; i++)
    {
    if (testuale[i].equals(pivot))
    { return i; }
    }
    return -1;
    }

    però mi sa che mi manca qualcosa dentro il try

    Scanner sc = new Scanner(new FileReader("prova.txt"));
    StringTokenizer st;
    while(sc.hasNext())
    {
    String linea = sc.nextLine();
    st=new StringTokenizer(linea,"stop, "); //penso che questa riga di codice sia completamente sbagliata...vero? perchè volevo spezzare la linea quando incontra uno stop ed uno spazio bianco ma sembra che non funzioni..
    int ris = traduci(linea);
    }

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da bobo24
    st=new StringTokenizer(linea,"stop, "); //penso che questa riga di codice sia completamente sbagliata...vero?
    Sì, è sbagliata. Il secondo parametro è un String che contiene l'elenco dei singoli caratteri che fanno da delimitatori. Cioè 's' sarebbe un delimitatore, 't' idem, 'o' idem, ecc.... Singolarmente.

    Quindi non puoi usare StringTokenizer per spezzare su una "parola". Ti conviene spezzare solo per lo "spazio" e poi cercare tu il token "stop" finale.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    123
    Ora in output ottengo i numeri che avevo sul file in cifre (se per es nel file avevo due tre stop ora mi appare 23...però ora mi amnca l'ultimo passo...li devo sommare tra di loro...e qua mi riesce molto difficile perchè non sono numeri normali)..
    mi spiego meglio facendovi vedere il codice che ho fatto....il metodo che chiamo è quello che mi è stato suggerito sopra...

    codice:
    try {
                BufferedReader br = new BufferedReader(new FileReader("prova.txt"));
                String line;
                StringTokenizer st;
                int temp;
                while ((line = br.readLine()) != null) {
                    st = new StringTokenizer(line);
                    while (st.hasMoreTokens()) {
                        try {
                            int ris = traduci(st.nextToken());
                            if(ris != -1)
                            {
                                System.out.print(ris);
                            }
                            else
                            {
                                System.out.println();
                            }
                        }
                        catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
            catch (Exception e) {
                e.printStackTrace();
            }
    
        }

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da bobo24
    li devo sommare tra di loro...e qua mi riesce molto difficile perchè non sono numeri normali
    L'unica particolarità è che sono le singole "cifre" che devono comporre un numero!
    Quindi se traduci 8 poi 4 poi 9 devi semplicemente comporre un numero unico facendo moltiplicazioni per 10 e somme.

    Tieni una variabile, inizialmente a 0, prima di sommarci una cifra moltiplichi questa variabile per 10.

    codice:
    0*10  = 0   + 8 = 8
    8*10  = 80  + 4 = 84
    84*10 = 840 + 9 = 849
    A me pare elementare ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2025 vBulletin Solutions, Inc. All rights reserved.