Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Peugeot Polygon Concept: ecco il futuro delle utilitarie
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Polygon è la concept car di Peugeot che mostra il futuro delle soluzioni del segmento B: tra design compatti e innovativi affiancati da dimensioni compatte uno scherzo dalla manovrabilità incredibile per le manovre a bassa velocità
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione
OPPO ha portato in Italia, dal 1° luglio 2026, Reno16 Pro: display AMOLED da 6,32 pollici a 144Hz, tripla fotocamera con sensore principale da 200 megapixel, chip Dimensity 8550 Super e batteria da 6000mAh, al prezzo di lancio di 899 euro. Lo abbiamo provato per due settimane insieme al nuovo accessorio Bubble, per capire se la formula compatta della serie regge ancora di fronte a un listino da 1099 euro
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
MiniLED di fascia media con local dimming a 192 zone, 144 Hz nativi e audio firmato Devialet. La prova strumentale riscontra colori affidabili e gaming reattivo, per un prodotto molto accessibile e convincente. Ma la soundbar aggiuntiva è quasi d'obbligo
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-09-2005, 12:39   #1
raniero
Member
 
Iscritto dal: Sep 2005
Messaggi: 37
[java] Chi trova il baco nel mio programma?!

ciao, vi spiego il tutto: devo scrivere i valori di una matrice creata in tempi random su un file .txt. La matrice visualizzata su schermo funziona, il problema e' che quando lancio il programma, il + delle volte non mi scrive i valori della matrice nel file .txt , ma mi scrive tutti zero.. e qualche volta ( a caso!) mi scrive (nel file .txt) la prima linea della matrice e basta! Il programma e' costituito da due file Lavori.java (dove si crea la matrice) e il file Main.java (dove creo gli oggetti e faccio partire il tutto). HELP ME!


File Lavori.java :


Codice:
import java.util.Timer; 
import java.util.TimerTask; 
import java.io.*; 

   

  public class Lavori { 
 
  Timer timer;

   int x = 0;
   public static int v[]=new int[5];  
   public static int macchine[][] = new int[101][6]; 
   public static int b=0;
   public static int s=1;

           public void  scrivi() throws IOException {   //metodo che scrive su file
    
           FileWriter w;
           w=new FileWriter("ceppo.txt");
          BufferedWriter q;
          q=new BufferedWriter (w);

          for(int f = 1; f < 6; f++){ 
          for(int r = 0; r < 6; r++){
          s=(macchine[f][r]);
          q.write( s+ " "); 
          q.flush();}}
          System.out.println(" test ---------> valore macchina prima riga pos 1 " +macchine[1][2]); 
         
         }    //fine metodo scrivi






       public void Reminder(int seconds) {   // metodo che crea il tempo  casuale

        Lavori risultato= new Lavori();
        timer = new Timer();
        x= (int)Math.round(10*Math.random()); 
        timer.schedule(new RemindTask(), x*100, seconds*100); 
                                     
        }   //fine reminder




      public  class RemindTask extends TimerTask { 


                                         
           public void run() {              //metodo che crea la matrice

              int co=0;
               int i=0; 

                         while ( i < 4 ) {   

                           v[i]= (int)Math.round(3*Math.random()); 
                           i++; 

                           }     // fine while

                
                             
                                         macchine[++b][0]=b; 
                                         macchine[b][1]=x; 
                                         macchine[b][2]=v[0]; 
                                         macchine[b][3]=v[1]; 
                                         macchine[b][4]=v[2]; 
                                         macchine[b][5]=v[3]; 
                              
                                          System.out.println (" macchina  " +b + "  minuti   "  +x+ "  pos1  " +v[0]+ 
                                                                       "  pos2   " +v[1]+ "   pos3  " +v[2]+ "  pos4   " +v[3]);
                                           

                                   ++co;              
                                   
                                      

                                   if (co==1){
                                    timer.cancel();}
                                    
                               
               }  //  fine run 

       }  // fine remindtask
                                                 
  }  // fine crea

File Main.java :

Codice:
public class Main { 
 static Lavori t;
    
    public static void main(String args[])  throws IOException  {
  
    int i=0;
           
      for(i=0;i<5;i++) { 
        
       t = new Lavori();       
       t.Reminder(1); 
       t.scrivi();
        }

     }
}

Ultima modifica di raniero : 16-09-2005 alle 13:05.
raniero è offline   Rispondi citando il messaggio o parte di esso
Old 16-09-2005, 13:30   #2
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
probabilemtne perche quando invochi scrivi() il thread che deve compilare la matrice non l'ha ancora compilata e quindi la matrice è ancora a zero.
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 16-09-2005, 16:34   #3
raniero
Member
 
Iscritto dal: Sep 2005
Messaggi: 37
Innanzi tutto ti ringrazio per avermi risposto, come potrei ovviare al problema, ossia ritardare l'esecuzione del metodo scrivi() ?
raniero è offline   Rispondi citando il messaggio o parte di esso
Old 16-09-2005, 17:13   #4
3nigma666
Senior Member
 
L'Avatar di 3nigma666
 
Iscritto dal: Jan 2005
Città: A casa mia
Messaggi: 825
delay(numeromillisecondi di ritardo)
ma questo metodo è abbasta inefficace,in quanto non sai esattamente quanto tempo impiega a craere la matrice,potresti comunque incappare nello stesso inconveniente se il ritardo cjhe hai messo è troppo piccolo!
Diciamo che è completamente sbagliato l'apporcio che hai utiizzato per affrontare il problema! quando si tratta di tempo bisogna sempre appogiarsi sui DESIGN PATTERN (strategie universalmente riconosciute per risolvere problemi comuni,come il tuo)
1 metodo :

si basa sulla "sincronizzazione" dei thread in gioco.

Lo spiego brevemente è abbastanza facile:

public class matrice
{

public matrice{...}

public syncronized void crea_matrice ()
{
//crea la tua matrice
//quando è creata invochi questo metodo sottostante:
notify();
}


public syncronized void scrivi()
{
wait(); //il metodo wait non fa procedere il thread avanti fino a quando
//non riceve il segnale da notify();
//scrivi ora su file
}

....
}


questo è il metodo.

c'è n'è anche un secondo utilizzando il pattern observe observable. il concetto è che hai un osservatore e un osservato. Devi dichairare una interfaccia che implementa observe (l'osservatore) che sara poi richiamata dal tuo oggetto ke osserva.

e l'oggetto osservato extends observable.


quindo lo stato dell'oggetto osservato cambia (nel tuo caso è creata la matrice) comunica a tutti gli osservatori ke lo stato è cambiato e gli osservatori faranno il loro compito (scrive su txt)
Quindi nel tuo caso l'osservato sara la classe ke genera la matrice.
L'osservatore la classe che scrivera la matrice su txt.

tipo

----> Runnable.java

public interface Runnable implements observe



---> Genera.java

public class Genera extends observable

{
.....
}

---> Scrivi.java

public class Scrivi implements Runnable

{
....
}


Ok questo è il concetto di base. per la sintassi corretta basta ke fai una piccola ricerca in google su design pattern è troppo lungo da scrivere qua tutto, e lunedi ho un esame (ARGGGHH)

bye spero di essere stato utile
3nigma666 è offline   Rispondi citando il messaggio o parte di esso
Old 16-09-2005, 17:18   #5
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
Devi sincronizzare i thread: crea una variabile booleana nel thread inizializzata a false; quindi un metodo sincronizzato (synchronized) nel thred che la imposta a true e che il thread usera per segnalare che la computazione è terminata e che deve eseguire come ultima istruzione : notifyAll();

un altro metodo sinconizzato done() serve per avere il valore di questa variabile booleana e sarà utilizzato dal main per controlalre se la matrice è stata compilata con istruzioni di questo genere:

synchronized(t){
while(! t.done())
t.wait();
t.print();
}
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 16-09-2005, 17:21   #6
3nigma666
Senior Member
 
L'Avatar di 3nigma666
 
Iscritto dal: Jan 2005
Città: A casa mia
Messaggi: 825
Quote:
Originariamente inviato da anx721
Devi sincronizzare i thread: crea una variabile booleana nel thread inizializzata a false; quindi un metodo sincronizzato (synchronized) nel thred che la imposta a true e che il thread usera per segnalare che la computazione è terminata e che deve eseguire come ultima istruzione : notifyAll();

un altro metodo sinconizzato done() serve per avere il valore di questa variabile booleana e sarà utilizzato dal main per controlalre se la matrice è stata compilata con istruzioni di questo genere:

synchronized(t){
while(! t.done())
t.wait();
t.print();
}
anche , piu facile anche se meno elegante
3nigma666 è offline   Rispondi citando il messaggio o parte di esso
Old 16-09-2005, 17:45   #7
raniero
Member
 
Iscritto dal: Sep 2005
Messaggi: 37
Quote:
Originariamente inviato da 3nigma666
anche , piu facile anche se meno elegante
Il problema è che i thread io li devo ancora studiare!, quindi il mio metodo delay(millesc ritardo) va cancellato?
ma se lo elimino poi come faccio a creare la matrice in un tempo random?!

grazie per l'interessamento e' un piacere imparare da gente in gamba come voi.

Ultima modifica di raniero : 16-09-2005 alle 17:50.
raniero è offline   Rispondi citando il messaggio o parte di esso
Old 16-09-2005, 18:06   #8
3nigma666
Senior Member
 
L'Avatar di 3nigma666
 
Iscritto dal: Jan 2005
Città: A casa mia
Messaggi: 825
utilizzare i Thread in java è una cagata , anon è come il C ke per invocare uin thread t serve mezza pagina di codice,sono 3 righe di codice ora ti faccio 1 esempio,.e vedrai ke è 1 stupidata

Codice:
//è un pezzo di codice del gioco ping pongo ke ho fatto qualke mese fa
//qua in particolare Nella classe PingPong creo una sottoclasse privata 
//ThreadBNall che ha il compito di far partire in un Thread la logica relativa 
// allo spostamento della pallina

public class PingPong
{
 ..............................
  private ThreadBall ball;


public PingPong ()
{
   .............
   game = new ThreadGame();   //istanzio un nuovo Thread
   game.start();                      //lo faccio partire. in quanto invocando il metodo start ,parte il metodo run() implementato qua sotto

}

private class ThreadBall extends Thread
    {
         
  public ThreadBall()
        {
          Timer = 30;  //tempo di ritardo
        }
        
        public void run()
        {
            for(;;)
           {
              
               Ball_logic();
               try  
               {
                Thread.sleep(Timer); //Stoppo per Timer millisecondi il Thread
                                             //Questo Stop è obbligatorio da fare
                                             //altrimenti la cpu non ha il tempo di
                                             // gli altri thread! Ricordati di metterlo 
                                             //ogni qual volta creai 1 nuovo Thread
   }catch (InterruptedException e){
                System.out.println(e);
               }                
           }
        }

    }
CAPITO?? è mooolto semplice .Se non ricordo male sono queste due le classi da importare :

import java.awt.*;
import java.awt.event.*;

Ultima modifica di 3nigma666 : 16-09-2005 alle 18:13.
3nigma666 è offline   Rispondi citando il messaggio o parte di esso
Old 16-09-2005, 21:33   #9
raniero
Member
 
Iscritto dal: Sep 2005
Messaggi: 37
Quote:
Originariamente inviato da 3nigma666


CAPITO?? è mooolto semplice .
Ehm, se potresti farmi l'esempio diretto nel mio codice sarebbe meglio, sto facendo su un casino madornale!

Quando hai tempo, so che hai un esame, anche la prox settimana, io non ho fretta!
raniero è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Peugeot Polygon Concept: ecco il futuro delle utilitarie Peugeot Polygon Concept: ecco il futuro delle ut...
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione Reno16 Pro: il compatto di OPPO punta su fotocam...
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto Kindle Scribe Colorsoft: riduce le cornici e div...
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
Gemini si integrerà con le auto e potrà ...
Addio a OxygenOS di OnePlus e alla Realm...
Intel conferma l'aumento dei prezzi su C...
In vendita Withings BodyFit, molto più d...
Inkterface: Steam Machine ospita un pann...
Stare seduti oltre 30 minuti di fila aum...
A Milano l'Italia ha firmato la sovranit...
Cos'è PeerTube, la piattaforma di...
In 12 articoli TOP c'è il meglio ...
La pirateria è l'unica tutela per...
Roomba Plus 516 Combo in offerta a 479€:...
ASUS ROG Strix G16 con RTX 5070 Ti super...
Google ammette il problema: la corsa all...
MOVA LiDAX Ultra 800 è un robot tagliaer...
iPhone 17 256GB oggi torna a soli 849€ s...
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: 14:08.


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