Monatsdurchschnittstemperaturen

Punica

Mitglied
Hallo,
Wir haben in Informatik eine Aufgabe bekommen, doch ich weiß nicht wie ich diese mit
Arrays lösen kann könntet ihr mir vielleicht einen Ansatz dazu geben?


Ich habe nur diesen Ansatz der glaube ich auch falsch ist.
Ich weiß nicht wie ich das lösen könnte ich dachte mir mit for-Schleifen, aber dann kam
ich auch nicht weiter, weil ich nicht weiß wie ich anfangen soll. Ich bin gerade total verwirrt.
Ich hoffe ihr könnt mir helfen!
Java:
double monat[]= new double[11]





3) Auswerten von Klimadaten
a) Die folgende Tabelle zeigt die Monatsdurchschnittstemperaturen der Stadt Jakutsk (Sibirien).
Monat 1 2 3 4 5 6 7 8 9 10 11 12
Temp.-42 -35 -20 -9 4 13 18 15 6 -8 -30 -40
°C

Mit einem Java-Programm soll nun die Jahresdurchschnittstemperatur (Summe der
Monatsdurchschnittstemperaturen dividiert durch 12) sowie für jeden Monat die Abweichung von der
Jahresdurchschnittstemperatur angegeben werden.
Die Eingabe soll wie folgt durchgeführt werden:
Geben Sie die Temperatur für den 1. Monat ein: -42
Geben Sie die Temperatur für den 2. Monat ein: -35
...
Geben Sie die Temperatur für den 12. Monat ein: -40
Die Ausgabe ist z. B.
Die Jahresdurchschnittstemperatur ist -10.67 Grad.
Der 1. Monat ist um 31.33 Grad kälter als der Durchschnitt.
Der 2. Monat ist um 24.33 Grad kälter als der Durchschnitt.
...
Ergänzung: Die Monatsnamen sollen angezeigt werden
b) Ergänze das Programm so, dass die Monatsnamen bei der Eingabe und Ausgabe als Text
ausgeschrieben werden. Weiterhin soll beim dem Text in der Ausgabe immer eine positive Zahl und
entweder kälter oder wärmer angezeigt werden.
Die Temperatur im Februar ist um 24.333333333333336 kälter als der Durchschnitt.
Die Temperatur im März ist um 9.333333333333334 kälter als der Durchschnitt.
Die Temperatur im April ist um 1.666666666666666 wärmer als der Durchschnitt.
 
Zuletzt bearbeitet von einem Moderator:

eRaaaa

Top Contributor
Mhm, eine wirklich konkrete Frage ist ja jetzt nicht erkennbar, aber wie kommst du auf 11? Es sind zwölf Monate :) (0-11 als Index im Array, dennoch sinds 12 :D)
Kannst du auch direkt initialiseren eig. = {-42, -35, -20 ,-9, 4 ,13, 18, 15, 6, -8 ,-30 ,-40}
Wobei hast du jetzt bei 3a) ein Problem? Schleife hört sich schon nicht schlecht an. Einfach eben alle Werte addieren!
 

eRaaaa

Top Contributor
Ich vermute enums hattet ihr noch nicht? Ja dann könnte man das sicherlich mit einem Array machen (du beziehst dich aber auf b) oder? :) )
 

muckelzwerg

Bekanntes Mitglied
Na imme rmit der Ruhe, das lässt sich doch recht gut zerlegen.
Du sollst die Monatsdaten vom Benutzer eingeben lassen. Ok. -> Funktionen für das Lesen von Benutzereingabe?
Dann musst Du diese Werte natürlich irgendwie speichern, denn Du wirst sie ja später in der Berechnung verwenden wollen.
-> Eine Temperatur eingelesen? Wohin damit?
Da würde sich dann doch gleich mal ein erstes Array anbieten. -> Was sind Arrays? Wie funktionieren sie? Ein Array für Zahlen.
Soweit so gut. Du hast ein Array mit den Zahlen darin. Woher bekommst Du die Monate? Die stehen einfach fest, ändern sich ja nicht. Also machst Du gleich mal noch ein Array und schreibst alle zwölf Monatsnamen da hinein. -> Array für Strings.
Durchschnittstemperatur kannst Du mit Deiner Formel berechnen. Dafür musst Du alle zwölf Temperaturen nacheinander aus dem Array herausholen und zu einem Wert "Summe" zusammenrechnen. -> Summe beginnt bei 0
Der Ablauf passt genau zu einer Schleife. -> "für jeden T-Wert von 0 bis 11, erhöhe die Summe um Wert x"
Wie Arrays funktionieren hast Du Dir angesehen. -> Wie funktioneren "For-Schleifen"? Start, Ende, Schrittweite?
Jetzt gibst Du die Durchschnittstemperatur erstmal auf der Konsole aus. -> Ausgabe von Text und Daten?
Wenn Du eine Schleife für die zwölf Temperaturen machen kannst, dann kannst Du auch genauso eine für die zwölf Monatsnamen machen.
Also wieder eine Schleife für zwölf Einträge und diesmal holst Du Dir gleich den Namen des Monats aus dem einen Array und seine Temperatur aus dem anderen. -> Zweite Schleife für die Ausgabe der Monate und Abweichungen.
Du berechnest die Differenz zur Durchschnittstemperatur und gibst dann "Monatsname" und "Differenz" aus.

-> Funktionen für das Lesen von Benutzereingabe?
-> Eine Temperatur eingelesen? Wohin damit?
-> Was sind Arrays? Wie funktionieren sie? Ein Array für Zahlen
-> Array für Strings.
-> Summe beginnt bei 0
-> "für jeden T-Wert von 0 bis 11, erhöhe die Summe um Wert x"
-> Wie funktioneren "For-Schleifen"? Start, Ende, Schrittweite?
-> Ausgabe von Text und Daten?
-> Zweite Schleife für die Ausgabe der Monate und Abweichungen.

Wenn Du soweit bist, fällt Dir entweder von selbst ein, wie Du das mit "kälter" und "wärmer" machst, oder wir schauen uns das nochmal an.
 

Punica

Mitglied
Java:
 int [] werte = new int [12]; 
          int werte = eingabe.nextInt();

Warum kann ich das nicht machen?
 

Punica

Mitglied
funktioniert irgendwie nicht, der sagt das immernoch,dass 2 mal das gleiche da ist
Java:
Scanner eingabe = new Scanner (System.in);
        int x=0;
        int [] werte = new int [11];
        int werte[x] = eingabe.nextInt();
 

eRaaaa

Top Contributor
Du hast noch immer nicht gelesen oder? Siehst du vor meinem werte[x] ein int? :)
So kommst du nicht voran und so macht es dir sicher auch kein Spaß oder wenn du bei jedme kleinen bisschen nachfragen musst. Lies dich doch einfach mal in die Themen Array + for-Schleife ein und die Aufabe sollte in null Komma nichts erledigt sein.
 

ARadauer

Top Contributor
funktioniert irgendwie nicht, der sagt das immernoch,dass 2 mal das gleiche da ist
Das int brauchst du beim benutzen nicht mehr dazu schreiben... nur das erste mal beim "initialiseren" der variable



Java:
package abstracttest;

import java.util.Scanner;

public class Test {

   public static void main(final String[] args) {
      Scanner eingabe = new Scanner (System.in);
      int [] werte = new int [12];
      for(int i = 0; i < werte.length; i++){
         System.out.println("Wert "+(i+1)+" eingeben:");
         werte[i] = eingabe.nextInt();   
      }
      
      System.out.println("Danke");
      for(int i = 0; i < werte.length; i++){
         System.out.print(werte[i]+", ");
      }      
   }
}
 

Punica

Mitglied
ok schonmal danke für die tipps habe mir auch schon das array tutorial durchgelesen. eine frage habe ich trotzdem noch wie kann ich den array jetzt dividieren? brauch ich da wieder eine andere variable, weil der sagt immer wenn ich werte dividieren will, dass der operator damit nicht funktioniert.
 

ARadauer

Top Contributor
ok schonmal danke für die tipps habe mir auch schon das array tutorial durchgelesen. eine frage habe ich trotzdem noch wie kann ich den array jetzt dividieren?
Wie willst du eine liste divideren?

brauch ich da wieder eine andere variable, weil der sagt immer wenn ich werte dividieren will, dass der operator damit nicht funktioniert.
für die summe? ja klar, die musst du dir aber erst ausrechnen...

Java:
public static int getSum(int[] values){
      int sum =0;
      for(int i = 0; i<values.length;i++){
         sum +=values[i];
      }
      return sum;
   }
 

akimoon

Aktives Mitglied
Stell dir ein array mal wie einen kleinen Schrank vor, wobei in jeder Schublade irgendwas stecken kann.

Beispiel: Der Schrank(array) heißt "int_array" ~~> dann kannst du mit int_array[0] auf den Wert in der 1. Schublade zugreifen, mit int_array[1] auf den in der zweiten usw... durch int[] gibst du vor, dass in den Schubladen lauter int-Werte liegen.

Ein Array an sich ist aber keine Zahl, sondern eben ein Array, daher kannst du es auch nciht so einfach teilen.

Aber du könntest ja zum Beispiel die Werte der Reihe nach durchgehen, zusammenzählen und dann die Summe dividieren? ;)
 

Punica

Mitglied
So es funktioniert jetzt soweit alles, aber bei der Abweichung gibt er zwar die richtigen Werte raus aber verschoben also für den falschen Wert und dann habe ich noch ein Problem mit den Textstrings ich weiß nicht wie die gehen denn auf dem Zettel die uns der Lehrer gegeben hat sind nur int und double Arrays.
Java:
import java.util.Scanner;
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
              Scanner eingabe = new Scanner (System.in);



      int [] werte = new int [12];


         for(int i = 0; i < werte.length; i++){
            System.out.println("Wert "+(i+1)+" eingeben:");
            werte[i] = eingabe.nextInt();


      }
            int sum =0,durch;
        for(int i = 0; i<werte.length;i++){
            sum +=werte[i];

      }

     durch= sum/12;

      System.out.println("Temperaturdurchschnitt in Jakutsk:    "+durch);
        for(int i = 0; i < werte.length; i++){
            System.out.print(werte[i]+", ");

      }
        for(int i =0; i< werte.length; i ++){
            System.out.println(werte[i]-durch+"     beträgt die Abweichung");

        }

   }
}
 

ARadauer

Top Contributor
und? frage?
ob du jetzt
int [] werte = new int [12];
schbreibst oder
String [] werte = new String [12];
... dann hast du dein String array...
ach wurscht...
ich mach feierarbend...
 

Punica

Mitglied
So ich habe mir jetzt alles nochmal durchgelesen und habe es jetzt auch einigermaßen verstanden und bin jetzt fast fertig. Ich muss nur noch die letzte Aufgabe machen:

b) Ergänze das Programm so, dass die Monatsnamen bei der Eingabe und Ausgabe als Text ausgeschrieben werden. Weiterhin soll beim dem Text in der Ausgabe immer eine positive Zahl und entweder kälter oder wärmer angezeigt werden.
Die Temperatur im Februar ist um 24.333333333333336 kälter als der Durchschnitt. Die Temperatur im März ist um 9.333333333333334 kälter als der Durchschnitt. Die Temperatur im April ist um 1.666666666666666 wärmer als der Durchschnitt.

Man muss das mit einer If-Abfrage machen nur komme ich da gerade nicht weiter, weil ich nicht weiß wie ich da mit den Arrays umgehen kann und wie ich ein Int in ein Double umwandeln kann damit das mit den Kommazahlen funktioniert.
Hier ist erstmal mein Quellcode soweit:

Java:
import java.util.Scanner;
public class Main {




    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
      Scanner eingabe = new Scanner (System.in);



      double [] werte = new double [12];
      String monat [] =  {"Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"};


         for(int i = 0; i < werte.length; i++){
            System.out.println("Temperatur für "+monat[i]+" eingeben:");
            werte[i] = eingabe.nextInt();


      }
            int sum =0,durch;


        for(int i = 0; i<werte.length;i++){
            sum +=werte[i];

      }

     durch= sum/12;

      System.out.println("Temperaturdurchschnitt in Jakutsk:    "+durch);
     
      
        //for(int i=0; i<werte.length; i ++){
            //System.out.println(werte[i]-durch+"     °C beträgt die Abweichung im "+monat[i]);


      int j=0;
            if (j<=durch){
                j++;
                j=0;
                System.out.println ("Der Monat"+monat[j]+"ist");
            }


            
      }
    }

Ich hoffe ihr könnt mir hierbei nochmal helfen :)
 

XHelp

Top Contributor
Warum speicherst du die Werte in einem Double-Array, wenn du ohnehin nur Integer eingeben kannst?
int/int ergibt nun mal int. Zudem ist auch
Code:
durch
als int deklariert.
Auf welches Programmteil bezieht sich überhaupt die Frage?
 

Punica

Mitglied
ok dann lasse ich das einfach so, aber wie kann ich jetzt nur positive zahlen ausgeben oder machen das der monat immer eins weiter geht in der if-abfrage? ist das genauso wie bei der for-schleife?
 

Punica

Mitglied
So ist das ja soweit richtig oder? aber bei mir zeigt er bei der else-Abfrage noch einen Fehler brauch ich da wieder eine andere Variable?

Java:
      for(int z=0; z<monat.length;z++){
            if (j<=durch){
                j++;
                j=0;
                diff= werte[z]-durch;

                System.out.println ("Der Monat "+monat[z]+"  ist"+diff+" kälter als der Durchschnitt");
            }
            else(j>=durch){

}

 }
 

muckelzwerg

Bekanntes Mitglied
Nein, da fehlt nur ein weiteres "if"
else if(...)
sonst kann der Parser deinen Programmcode nicht korrekt zerlegen und Dein Programm nicht verstehen.
 

Punica

Mitglied
ok dann wäre ich jetzt fertig mit dem programm nur wie mache ich das da kein + oder - mehr vorsteht, wie das in der aufgabe gefordert ist?
 

akimoon

Aktives Mitglied
klappt ja echt super, so lob ich mir das :)
aber eine kleine Frage hätte ich noch:

Für was verwendest du das folgende:
Java:
if (j<=durch){
                j++;
                j=0;

Du könntest dir außerdem wegen dem Fließkommazahl-Problem evtl. auch die Methode nextDouble() der Klasse java.util.Scanner anschauen und vllt die Summenberechnung etc anpassen? :)

Was du zusätzlich tun könntest, um etwas neues zu lernen, wäre einen ternären Operator zu verwenden. Dies ist quasi eine kurze Schreibweise für if-else.
Java:
System.out.println("Der Monat "+monat[z]+"  ist "+((j<=durch)?"kälter":"wärmer")+" als der Durchschnitt");
 
Zuletzt bearbeitet:


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...

Neue Themen


Oben