Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Output senza senso.

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    30

    Output senza senso.

    Devo realizzare un programma che, una volta raccolti una serie di dati meteorologici provenienti da varie cittā, deve restituire la media delle temperature raccolte nella cittā a cui si č interessati (inserita da tastiera dall'utente), oltre la minima e la massima.

    Io in questo caso ho scelto come cittā Bologna e l'output č assurdo:

    Inserisci il nome della cittā a cui appartengono le temperature da elaborare
    Bologna
    Output:
    A Bologna la media delle temperature rilevate č: NaN
    A Bologna la temperatura massima č: 0.0
    A Bologna la temperatura minima č: 5.1

    La minima e la massima sono sbagliate e la media non č un numero.
    Inoltre mi da questi valore per ogni cittā.

    codice:
    import java.io.*;
    public class ElaborzioneDati {
    
    	private double media;
    	private double max;
    	private double min;
    	private DatoMeteorologico[] registroDatiMeteorologici;
    	private int contatore;
    	private String nomeCittā;
    	private int contatoreRilevazioneCittāDesiderata;
    
    	public ElaborzioneDati() {
    	    registroDatiMeteorologici=new DatoMeteorologico[10];
    		contatore=0;
    		media=0;
    	}
    	public void addDatoMeteorologico(DatoMeteorologico aDatoMeteorologico){
    		while(contatore<=9){
    			registroDatiMeteorologici[contatore]=aDatoMeteorologico;
    			contatore++;
    		}
    	}
    	public void calcolaMedia(){
    	   	int contatoreCittāDesiderata=0;
    	   	nomeCittā=getLine();
    	   	for(int i=0;i==contatore;i++){
    	   		if(nomeCittā.compareTo(registroDatiMeteorologici[i].getNomeStazione())==0){
    	   		    media+=registroDatiMeteorologici[i].getTemperatura();
    	   			contatoreCittāDesiderata+=1;
    	   			contatoreRilevazioneCittāDesiderata=i;
    	   		}
    	   	}
    	   	media=media/contatoreCittāDesiderata;
    	}
    	public void trovaMax(){
    		max=registroDatiMeteorologici[contatoreRilevazioneCittāDesiderata].getTemperatura();
    		for(int i=1;i==contatore;i++){
    		  if(nomeCittā==registroDatiMeteorologici[i].getNomeStazione()){
    		    if(max<registroDatiMeteorologici[i].getTemperatura()){
    				max=registroDatiMeteorologici[i].getTemperatura();
    		    }
    		  }
    		}
    	}
    	public void trovaMin(){
    		min=registroDatiMeteorologici[contatoreRilevazioneCittāDesiderata].getTemperatura();
    		for(int i=1;i==contatore;i++){
    		  if(nomeCittā==registroDatiMeteorologici[i].getNomeStazione()){
    		    if(min>registroDatiMeteorologici[i].getTemperatura()){
    				min=registroDatiMeteorologici[i].getTemperatura();
    		    }
    		  }
    		}
    		displayStatus();
    	}
    	public static String getLine(){
        	InputStreamReader reader=new InputStreamReader(System.in);
        	BufferedReader input=new BufferedReader(reader);
        	String linea="";
        	try{
        		System.out.println("Inserisci il nome della cittā a cui appartengono le temperature da elaborare");
        		linea=input.readLine();
        		input.close();
        	}
        	catch(IOException e){
        		System.out.println("Errore di input");
        	}
        	return linea;
        }
        public void displayStatus(){
        	System.out.println("A "+nomeCittā+" la media delle temperature rilevate č: "+media);
        	System.out.println("A "+nomeCittā+" la temperatura massima č: "+max);
        	System.out.println("A "+nomeCittā+" la temperatura minima č: "+min);
        }
    
    }
    
    
    public class DatoMeteorologico {
    
    	private double temperatura;
    	private String orarioRilevazione;
    	private String nomeStazione;
    
    	public DatoMeteorologico(String aNomeStazione, String aOrarioRilevazione, double aTemperatura) {
    		temperatura=aTemperatura;
    		orarioRilevazione=aOrarioRilevazione;
    		nomeStazione=aNomeStazione;
    	}
    	public double getTemperatura(){
    		return temperatura;
    	}
    	public String getOrarioRilevazione(){
    		return orarioRilevazione;
    	}
    	public String getNomeStazione(){
    		return nomeStazione;
    	}
    
    
    }
    
    
    public class Test {
    
    
    	public static void main(String[] args) {
    		DatoMeteorologico dato1=new DatoMeteorologico("Bologna","01:00",5.1);
    		DatoMeteorologico dato2=new DatoMeteorologico("Seattle","15:00",-10.5);
    		DatoMeteorologico dato3=new DatoMeteorologico("Bologna","02:00",4.1);
    		DatoMeteorologico dato4=new DatoMeteorologico("Bologna","03:00",4.9);
    		DatoMeteorologico dato5=new DatoMeteorologico("Seattle","18:00",-5.2);
    		DatoMeteorologico dato6=new DatoMeteorologico("CasaBlanca","18:00",18);
    		DatoMeteorologico dato7=new DatoMeteorologico("CasaBlanca","20:00",18.2);
    		DatoMeteorologico dato8=new DatoMeteorologico("CasaBlanca","24:00",20.3);
    		DatoMeteorologico dato9=new DatoMeteorologico("Seattle","24:00",-15);
    		DatoMeteorologico dato10=new DatoMeteorologico("Bologna","07:00",7.1);
    		ElaborzioneDati elaboratore=new ElaborzioneDati();
    		elaboratore.addDatoMeteorologico(dato1);
    		elaboratore.addDatoMeteorologico(dato2);
    		elaboratore.addDatoMeteorologico(dato3);
    		elaboratore.addDatoMeteorologico(dato4);
    		elaboratore.addDatoMeteorologico(dato5);
    		elaboratore.addDatoMeteorologico(dato6);
    		elaboratore.addDatoMeteorologico(dato7);
    		elaboratore.addDatoMeteorologico(dato8);
    		elaboratore.addDatoMeteorologico(dato9);
    		elaboratore.addDatoMeteorologico(dato10);
    		elaboratore.calcolaMedia();
    		elaboratore.trovaMin();
    	}
    }

  2. #2
    codice:
    public void addDatoMeteorologico(DatoMeteorologico aDatoMeteorologico){
    		while(contatore<=9){
    			registroDatiMeteorologici[contatore]=aDatoMeteorologico;
    			contatore++;
    		}
    	}
    Non capisco perchč fai l'inserimento in questo modo....
    O meglio, sicuramente vuoi inserire dati fin quando contatore č minore uguale a 9, ma non č questo il modo;
    cosė il dato meteorologico lo inserisci per 9 volte nell'array, riempi l'array sempre con l'ultimo dato meteorologico che inserisci.

    Cambialo un po' in:

    codice:
    public void addDatoMeteorologico(DatoMeteorologico aDatoMeteorologico){
    	if (contatore <= 9){
    		registroDatiMeteorologici[contatore]=aDatoMeteorologico;
    		contatore++;
    	}
    }
    lolide
    Java Programmer

    Informati

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    30
    Ah! Giusto! Grazie molte.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    30
    Azz continua a darmi lo stesso output...probabilmente ci deve essere qualche errore anche negli altri metodi

  5. #5
    Originariamente inviato da mattia96
    Azz continua a darmi lo stesso output...probabilmente ci deve essere qualche errore anche negli altri metodi
    Ecco visto che lo sai, prova il codice e trova il bug
    lolide
    Java Programmer

    Informati

  6. #6

    Re: Output senza senso.

    Originariamente inviato da mattia96
    la media non č un numero.
    Perchč il ciclo non viene mai eseguito, e quindi esegue erroneamente la divisione per 0.
    Originariamente inviato da mattia96
    codice:
    	public void calcolaMedia(){
    	   	int contatoreCittāDesiderata=0;
    	   	nomeCittā=getLine();
    	   	for(int i=0;i==contatore;i++){
    	   		if(nomeCittā.compareTo(registroDatiMeteorologici[i].getNomeStazione())==0){
    	   		    media+=registroDatiMeteorologici[i].getTemperatura();
    	   			contatoreCittāDesiderata+=1;
    	   			contatoreRilevazioneCittāDesiderata=i;
    	   		}
    	   	}
    	   	media=media/contatoreCittāDesiderata;
    	}
    Correggi in i < contatore.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    30
    Grazie molte, in effetti ora funziona, ma come mai
    codice:
     for(int i=0;i==numero;i++)
    non funziona? non gli dice di fare le istruzioni nel ciclo numero-0 volte?

  8. #8
    Non funziona perchč lui cicla quando quella condizione č vera, quindi se i non č uguale a contatore non cicla.
    Non č che cicla fin quando i č uguale a contatore.
    lolide
    Java Programmer

    Informati

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    30
    Ahh ok grazie mille

  10. #10
    Originariamente inviato da mattia96
    Grazie molte, in effetti ora funziona, ma come mai
    codice:
     for(int i=0;i==numero;i++)
    non funziona? non gli dice di fare le istruzioni nel ciclo numero-0 volte?
    Se numero = 0, le istruzioni nel for vengono eseguite una volta, 0 altrimenti.
    Sappi che i == numero per un ciclo for č una condizione decisamente inusuale.

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.