Temperaturauswertung

Ich komme bei folgender Aufgabe nicht weiter:
Schreiben Sie ein Java-Programm namens Temperatur.java, welches eine Temperaturauswertung
für eine Woche übernimmt.

Das Programm soll mit Hilfe der Methode readValues für jeden der sieben Wochentag
drei Temperaturwerte einlesen und diese Daten in einem 2-dimensionalen double- Array abspeichern. Eine Inputdatei liegt bereit.

Das erstellte Array soll der Methode getAverage übergeben werden, welche aus den Daten
den Durchschnittswert jedes Tages berechnet. Die Tagesdurchschnittswerte sollen in ein 7-elementiges Array gespeichert und zurückgegeben werden.

Das Main-Programm soll abschließend die Tagesdurchschnittswerte auf die Standardausgabe
ausgeben.

Sie können davon ausgehen, dass die ersten drei eingelesenen Werte (d.h. die 1. Zeile der
Inputdatei) die Montagsdaten, die nächsten drei eingelesenen Werte (bzw. die 2. Zeile der Inputdatei) die Dienstagsdaten usw. sind.

So sieht die Inputdatei aus:
Code:
16.2 23.6 22.1
16.1 19.3 18.7
16.7 23.8 23.5
18.9 22.7 22.0
17.2 22.6 20.7
16.5 21.8 20.0
16.2 22.4 22.3

So mein Quellcode:

Java:
public class Temperatur{
public static void main(String[] arg){
 
}

   public static double[][] readValues() {
   double [][] aMatrix=new double [7][3];
   for (int i = 0; i < aMatrix.length; i++) {
 for (int j = 0; j < aMatrix[i ]. length; j++) {
 aMatrix[i ][ j ] = i + j ;
 }

 }
 return aMatrix;
}
  


 public static double[][] getAverage(){
    double [][] aMatrix2=new double [7][1];
     double  Durchschnitt= 0;
  for (int k=1; k<=3; k++) {
  Durchschnitt= (Durchschnitt+Durchschnitt+Durchschnitt)/3;
   for (int i = 0; i < aMatrix.length; i++) {
 for (int j = 0; j < aMatrix2[i ]. length; j++) {
 aMatrix2[Durchschnitt][Durchschnitt] = i + j ;
  }
  }
 return Durchschnitt;
} 
}
}

folgende Fehlermeldungen:
Code:
Temperatur.java:26: possible loss of precision
found   : double
required: int
 aMatrix2[Durchschnitt][Durchschnitt] = i + j ;
          ^
Temperatur.java:26: possible loss of precision
found   : double
required: int
 aMatrix2[Durchschnitt][Durchschnitt] = i + j ;
                        ^
Temperatur.java:29: incompatible types
found   : double
required: double[][]
 return Durchschnitt;
        ^
3 errors
 

Suinos

Bekanntes Mitglied
Und was genau ist deine Frage? Nicht weiterkommen passiert noch oft, aber dann immer wegen einem bestimmten Grund: Der Code kompiliert nicht und ich weiss nicht wieso, Der Code kompiliert zwar, macht aber nicht das was ich will, usw (und dann auch nicht die restlichen, wichtigen Informationen vergessen, wie Was sollte passieren? und Was passiert jetzt?) .

Aber mal sehn:

Deine
Code:
readValues
-Methode liest noch keine Werte ein, aber das ist für den Moment ja noch egal.

Deine
Code:
getAverage
-Methode ist so ziemlich falsch. Ich würde dort nochmals neu beginnen:
Lies die Aufgabenstellung nochmals durch! Wie sollte die Methode aussehen? Momentan hast du
Code:
double[][] getAverage()
, aber die Aufgabenstellung verlangt etwas anderes.

Zur Hilfestellung habe ich dir eine
Code:
main
-Methode gemacht, woran du erkennen solltest, was noch fehlt:

Java:
public static void main(String[] args)
{
	double[][] inputValues = readValues();
	
	double[] average = getAverage(inputValues);
	
	for (int i = 0; i < average.length; i++)
	{
		System.out.println("Durchschnitt von Tag " + (i + 1) + ": " + average[i]);
	}
}
 

VfL_Freak

Top Contributor
Moin,

mal kurz zu den Fehlermeldungen :
Java:
Temperatur.java:26: possible loss of precision
found   : double
required: int
 aMatrix2[Durchschnitt][Durchschnitt] = i + j ;
Du arbeitest mit "aMatrix2.length" .... "aMatrix2" ist aber von Typ "double[][]" !


Gleiches gilt für die zweite Meldung:
Java:
Temperatur.java:29: incompatible types
found   : double
required: double[][]
 return Durchschnitt;
"Durchschnitt" ist nur ein double-Wert, die Methode soll aber "double[][]" zurückgeben !

Gruß
Klaus
 
Und was genau ist deine Frage? Nicht weiterkommen passiert noch oft, aber dann immer wegen einem bestimmten Grund: Der Code kompiliert nicht und ich weiss nicht wieso, Der Code kompiliert zwar, macht aber nicht das was ich will, usw (und dann auch nicht die restlichen, wichtigen Informationen vergessen, wie Was sollte passieren? und Was passiert jetzt?) .

Aber mal sehn:

Deine
Code:
readValues
-Methode liest noch keine Werte ein, aber das ist für den Moment ja noch egal.

Deine
Code:
getAverage
-Methode ist so ziemlich falsch. Ich würde dort nochmals neu beginnen:
Lies die Aufgabenstellung nochmals durch! Wie sollte die Methode aussehen? Momentan hast du
Code:
double[][] getAverage()
, aber die Aufgabenstellung verlangt etwas anderes.

Zur Hilfestellung habe ich dir eine
Code:
main
-Methode gemacht, woran du erkennen solltest, was noch fehlt:

Java:
public static void main(String[] args)
{
	double[][] inputValues = readValues();
	
	double[] average = getAverage(inputValues);
	
	for (int i = 0; i < average.length; i++)
	{
		System.out.println("Durchschnitt von Tag " + (i + 1) + ": " + average[i]);
	}
}

Die Frage wäre: Der Code kompiliert nicht und ich weiss nicht wieso.

Danke für die main-Methode, aber muss es nicht
Java:
[code=Java]
public static void main(String[] args)
{
	double[][] inputValues = readValues();
	
	double[][] average = getAverage(inputValues);
	
	for (int i = 0; i < average.length; i++)
	{
		System.out.println("Durchschnitt von Tag " + (i + 1) + ": " + average[i]);
	}
}
[/code]

heißen? Die Durchschnitts-Matrix ist doch immer noch zweidimensional?
 
S

SlaterB

Gast
tja, das impliziert eben, dass das auch zu ändern ist wie so vieles, war schon einen Schritt weiter,

wieso sollte getAverage() ein double[][] zurückgeben und nicht ein double[]?
deine Ausgabe, deine Berechnung, die Aufgabe an sich, einfach alles spricht für eindimensional, ändere das lieber,

in getAverage() ist natürlich noch jede Menge anderes zu korrigieren,
überlege doch erstmal in Ruhe was eigentlich passieren soll,

> Durchschnitt= (Durchschnitt+Durchschnitt+Durchschnitt)/3;
ist doch irre

einen berechneten Durchschnitt als Array-Index zu verwenden und darin dann i+j abzuspeichern ist auch verrückt usw.

-----

vielleicht ist es leichter, wenn du erstmal nur ein eindimensionales Array an Eingabewerten hast und dazu einen einzelnen
Durchschnittswert berechnest,
also die ganze Aufgabe eine Dimension heruntergefahren,
klingt jetzt natürlich vielleicht eher noch mehr verwirrend, deshalb wäre es besser von anfang an klein zu beginnen und dann erst das komplizierte..
 
Danke für die Hilfe, hier übrigens die Lösung:

Java:
import IOulm.*;
import java.util.Formatter;

public class Temperatur{
   
   public static double[][] readValues(){
      double[][] t = new double[7][3];
      for (int tag = 0; tag < 7; tag++) {
         for (int zeit = 0; zeit < 3; zeit++) {
            if (Urc.readDouble()) {
               t[tag][zeit] = Urc.getDouble();
            } else {
               System.err.println("Fehler bei der Eingabe");
               System.exit(1);
            }
         }
      }
      return t;
   }
   
   public static double[] getAverage(double[][] t) {
      double[] avg = new double[7];
      for (int tag = 0; tag < 7; tag++) {
         double sum = 0;
         for (int zeit = 0; zeit < 3; zeit++) {
            sum = sum + t[tag][zeit];
         }
         avg[tag] = sum/3;
      }
      return avg;
   }
   
   public static void main(String[] args){
      double[][] temp = readValues();
      double[] avg = getAverage(temp);
      Formatter f = new Formatter(System.out);
       
      String[] wochentag = {"Montag:", "Dienstag:", "Mittwoch:",
         "Donnerstag:", "Freitag:", "Samstag:", "Sonntag:"};
   
      f.format("Durchschnittstemperaturen:\n");
      f.format("--------------------------\n");
      for (int i = 0; i < 7; i++) {
         f.format("%-11s %5.2f°C\n", wochentag[i], avg[i]);
      }
   }
}
 
S

SlaterB

Gast
> for (int zeit = 0; zeit < 3; zeit++)

> avg[tag] = sum/3;

die 3 ist ungünstig, in der Methode kannst du dir doch gar nicht sicher sein, wieviel Werte es sind, jedenfalls nicht im Quellcode,
laufe bis zur Länge des Arrays, teile durch die Länge des Arrays,

bei fest 3 Zeiten wären ansonsten drei Zeilen statt der Schleife fast kürzer
 

Neue Themen


Oben