Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    7

    Visibilità di un vettore

    Per descrivere il mio problema vi posto il codice

    private float[] putInVector(){

    float[] vector = new float[numberOfSample()];
    File soundFile = this.soundFile;
    int sample;

    try {
    AudioInputStream stream = AudioSystem.getAudioInputStream(soundFile);
    while((sample = stream.read(b)) != -1){
    for(int i = 0; i<b.length; i++){
    vector[i] = (float)b[i];

    ::: PUNTO 1

    }
    }
    stream.close();

    }catch(Exception e ){
    System.out.println("Errore");
    }

    ::: PUNTO 2

    return vector;
    }

    Il programma è molto semplice: devo portare il risultato di uno stream in un vettore!
    Il problema è che nel punto 1 riesco (Se faccio una print ) a visualizzare i valori del vettore.
    Nel punto 2 no. E quindi non restituisce nulla!

    Penso che il problema stia nella visibilita del vettore che è limitata all'interno del while.
    Come Posso fare??

  2. #2
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    non mi intendo molto di stream e cose varie.. però non mi pare che la visibilità del vettore sia limitata al while.. solo non riesco a vedere dov è dichiarato e istanziato b....

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Il problema non è di visibilità (se il codice è esattamente quello che hai postato).
    Qual è l'errore che ottieni esattamente (se di errore si tratta)?

    Altra cosa: la variabile "sample" contiene sempre il numero di byte letti dallo stream, quindi il ciclo for interno al while dovrebbe andare da 0 a "sample" e non fino alla dimensione totale dell'array (che potrebbe essere più grande del numero totale di byte effettivamente letti dallo stream).


    Ultima cosa: il codice postalo all'interno dei tag [*CODE] e [*/CODE] (senza l'asterisco rosso che ho aggiunto io) così viene mantenuta la formattazione del codice che risulta essere più leggibile, come nell'esempio qui sotto:
    codice:
    public static void main(String [] args) {
       System.out.println("Questa è solo una prova");
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    7
    Allora: la variabile b è un buffer di byte con 1000 elementi.

    Riguardo alla variabile sample hai perfettamente ragione, non me ne ero accorto e adesso la cambio.

    Il problema è a run-time, in compilazione va tutto liscio. In particolare quando stampo con:

    codice:
     
    for (int i=0; i<vector.length; i++){
                System.out.println("Valore vettore "+i+" "+vector[i]);
    }
    sul PUNTO2 vedo solo un vettore con i primi mille elementi inizializzati, mentre gli altri sono zero
    Non ne vengo a capo sembra che sia tutto ok ma proprio non va!


    Ciao!
    Per leleFT: sai quante birre con il prezzo di vista!

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    7
    TROVATO !!!
    codice:
    try {
       while((sample = stream.read(b)) != -1){
          for(int i = 0; i<sample; i++){
             vector[i] = (float)b[i];
    }
    l'infido errore si è insinuato negli indici del for, infatti in questo modo il vettore viene looopato da 0 a sample n volte e il valore delle componenti nelle prime sample posizioni viene sovrascritto ad ogni lettura dello stream:

    SOLUZIONE(Non molto elegante ma adesso lo riscrivo!):
    codice:
    while((ret = stream.read(b)) != -1){
        while(j<ret){
           vector[i] = (float)b[j];
           i++;
           j++;
           }
    j = 0;
    }
    Grazie a tutti per le risposte.
    Ciao


    E' Per Questo Che Ocaml Non Ha I Loop(o per lo meno non li si deve usare?) :master:

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.