Visualizzazione dei risultati da 1 a 8 su 8

Discussione: refresh

  1. #1

    refresh

    ciao a tutti, oggi ho finito di scrivere il mio primo programmino in java, niente di eccezionale un semplice orologio binario.
    Dato che sto studiando ora un po di java e sono proprio agli inizi vengo a chiedere aiuto qui per finire di compilarlo.
    Il programma funziona, ora vorrei che questo orologio incrementasse automaticamente senza dover ri-mandare in esecuzione il programma.
    Per farlo l'ho messo dentro un thread ma ovviamente il programma non fa un refresh della schermata ma ristampa tutto il listato nuovamente.
    Come posso fare per farlo refreshare?
    vi metto un pezzetto di codice per vedere come l ho organizzato
    codice:
    import java.lang.Math.*;
    import java.util.*;
    
    public class BinaryClock{
    	public static void main (String [] args){
    
    		int [] arrH = new int [13];
    		int [] arrDM = new int [6];
    		int [] arrUM = new int [10];
    		int [] arrDS = new int [6];
    		int [] arrUS = new int [10];
    		int [][] oreBin = new int [13][6];
    		int [][] decMin = new int [6][6];
    		int [][] uniMin = new int [10][6];
    		int [][] decSec = new int [6][6];
    		int [][] uniSec = new int [10][6];
    
    		//legge l'orario di sistema
    		Calendar cal = new GregorianCalendar();
    		//vengono assegnate le variabili
    		int ore = Integer.valueOf(cal.get(Calendar.HOUR));
    		int minuti = Integer.valueOf(cal.get(Calendar.MINUTE));
    		int secondi = Integer.valueOf(cal.get(Calendar.SECOND));
    		//Stampa l'orario in fomrmato standard
    		System.out.println("- "+ore+":"+minuti+":"+secondi+" -");
    		System.out.println("");
    		
    		//AM-PM
    		//prende l'ora in formato 24 e fa il controllo
    		int w = Integer.valueOf(cal.get(Calendar.HOUR_OF_DAY));
    		if (w>12){
    			System.out.println("1"); //se PM mette 1
    			System.out.println("");
    		} else {
    			System.out.println("0"); //se AM mette 0
    			System.out.println("");
    		}
    		
    		//INIZIO CICLO 12H
    		
    		//converte le 12 ore in binario
    		for (int x = 1; x<arrH.length; x++){
    			int val = x;
    			arrH[x] = val;
    			double j = val;
    			//conversione in binario
    			for (int i = 0; i<6; i++){
    				if ((j%2) == 0){
    					oreBin[x][i] = 0;
    				} else {
    					oreBin[x][i] = 1;
    				}
    				j = Math.floor(j/2);
    			}
    			//inverte l'array
    			for (int u = 0; u<oreBin.length; u++){
    				for (int z = 0, b=oreBin[u].length-1; z<b; z++, b--){
    					int tmp = oreBin[u][z];
    					oreBin[u][z] = oreBin[u][b];
    					oreBin[u][b] = tmp;
    				}
    			}
    			
    			//stampa tutti i numeri del ciclo in binario
    			for (int i = 0 ; i<oreBin[x].length; i++){
    				//corregge il bug delle 12-0 poratndo le ore12 da 0 a 12
    				if (ore == 0){
    					ore = 12;
    				}
    				//controlla se il valore convertito è uguale all ora corrente
    				if (val == ore){
    		//vede quanti numeri dell array deve visualizzare in base alle decine di minuti
    			//controlla se i minuti sono maggiori di 10 per prendere le decine
    					if (minuti>=10) {
    						double decMinuti = Math.floor(minuti/10);
    						int decine = (int) decMinuti;   //il valore intero di decMinuti 
    					 	int u = decine;		//assegna a i il valore parziale
    						for (int p = 0; p<u && p<6; p++ ) {
    							System.out.print(oreBin[x][p]);
    						}
    					} else {
    						int decine = minuti;
    						int u = decine;		//assegna a i il valore parziale
    						for (int p = 0; p<u && p<6; p++ ) {
    							System.out.print(oreBin[x][p]);
    						}
    					} break ;
    				}  	
    				System.out.print(oreBin[x][i]);	
    			}
    			System.out.println("");
    		} 
    		System.out.println("");
    		
    		//INIZIO CICLO DECINE MINUTI
    (..continua..)

    Grazie Claudio

  2. #2
    nessuno sa aiutarmi?

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Se il tuo programma usa lo standard output, non hai modo di "refreshare"... lo standard output per lui è una coda di uscita e i vari risultati saranno semplicemente accodati uno all'altro in output (l'output è infatti un OutputStream... Stream in inglese significa "fiume" e un fiume scorre sempre e solo in una direzione, non lo puoi far tornare indietro).

    Si possono escogitare diverse tecniche per cercare di simulare qualcosa del genere, ma non vale nemmeno la pena di star qui a discuterne perchè sono tutte false soluzioni.

    Appena avrai cominciato a prendere mano con la grafica, avrai a disposizione dei controlli più adatti a quello che intendi fare tu.


    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
    per caso hai qualche riferimento dove andare a vedere, vorrei ultimarla anche in maniera molto rustica, tanto man mano che vado avanti con lo studio la riscrivo migliorandola...
    grazie

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Originariamente inviato da traverso85
    per caso hai qualche riferimento dove andare a vedere, vorrei ultimarla anche in maniera molto rustica, tanto man mano che vado avanti con lo studio la riscrivo migliorandola...
    grazie
    Per andare a vedere cosa di preciso?
    "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

  6. #6
    non so se puoi indirizzarmi su qualche funzione specifica per fare quello che mi serve?

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Originariamente inviato da traverso85
    non so se puoi indirizzarmi su qualche funzione specifica per fare quello che mi serve?
    Come ho già detto, non esiste alcuna funzione specifica per fare quello che ti serve perchè non è, sostanzialmente, possibile farlo (né ha alcun senso).

    Lo standard output non è lo strumento adatto a fare quello che ti serve.

    Uno "stratagemma" (chiamiamolo così, anche se io la definirei una schifezza), potrebbe essere quello di dire: la console ha 25 righe, il mio output ha 5 righe, bene... dopo ciascun output stampo 19 righe vuote (una mi serve per il cursore). In questo modo le righe di output saranno sempre allineate in alto nella parte visibile della console.

    Non è una soluzione, è solo una pezza (anche brutta) perchè:

    1) La console è ridimensionabile.
    2) La console potrebbe essere più piccola
    3) La console potrebbe essere una normalissima finestra di un IDE
    4) La console potrebbe essere benissimo sostituita da un file di log


    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

  8. #8
    ok grazie..

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.