1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

Java-Problem- benötige Hilfe - Kopf explodiert

Dieses Thema im Forum "PHP & Co." wurde erstellt von limp, 14.11.07.

  1. limp

    limp Kaiser Wilhelm

    Dabei seit:
    06.06.05
    Beiträge:
    178
    Hallo zusammen,

    erstmal möchte ich mich für den Threadtitel entschuldigen, allerdings sitze ich nun ca 3Std vor dem Problem und sehe so langsam den Wald vor lauter Bäumen nicht mehr.

    Es handelt sich um unten stehenden Code, mithilfe dessen sollen von n-eingegeben Temperaturen und dessen "Orten" die höchste, die niedrigste & der Durchschnitt jener errechnet werden, zusätzlich sollen die Temperaturen mit den jeweiligen Orten verknüpft und passend ausgegeben werden.

    Soweit funktioniert das auch, doch wenn bspw erst 10Grad eingegeben werden, bei der nächsten Eingabe der Wert 20, belegt er mir tempmax natürlich mit 20, die 10 allerdings "fällt" raus und wird i.d.f. nicht als tempmin akzeptiert :(

    Ich habe jetzt sicherlich schon gute 3Std mit boolschen Ausdrücken herumeperimentiert, es ist sicher irgendeine Kleinigkeit, aber ich komme einfach (nicht) mehr drauf - hoffe jmd versteht mein Problem und kann mir helfen...

    Anbei der Code:

    Code:
    package wetterfrosch;
    
    import de.musin.bsinfo.util.*;
    
    public class Wetterfrosch 
    {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) 
    	{
    		// TODO Auto-generated method stub
    		String antwort=("");
    		
    			
    		do{
    		String name=(""), namemin=(""), namemax=("");
    		float temp, tempmin=0, tempmax=0, tempdschn=0;
    		int durchl;
    		
    		Console.print("Wetterfrosch");
    		Console.print("\n------------");
    		do{
    		Console.print("\n\nAnzahl Wetterstationen? (1-99) ");
    		durchl=Console.readInt();
    		}while(durchl<1||durchl>99);
    		for (int wiederh=1; wiederh<=durchl; wiederh++)
    		{
    				Console.print("Wetterstation "+Console.format(wiederh,"#00"));
    				Console.print("\n------------------");
    				do{
    				Console.print("\nName? ");
    				name=Console.readString();
    				}while(name.equals(""));
    				do{
    				Console.print("\nTemperatur? ");
    				temp=Console.readFloat();
    				}while(temp<-30||temp>40);
    				Console.print("\n\n");
    				
    				tempmin=0;
    				tempmax=0;
    				if(temp>tempmax)
    				{
    					tempmax=temp;
    					namemax=name;
    				}
    				if(temp<tempmin)
    				{
    					tempmin=temp;
    					namemax=name;
    				}
    				if(durchl==1)
    				{
    					tempmin=temp;
    					tempmax=temp;
    					namemax=name;
    					namemin=name;
    				}
    				tempdschn=tempdschn+temp;
    		}
    		tempdschn=tempdschn/durchl;
    		Console.print("\nNiedrigste gemessene Temperatur:\t"+Console.format(tempmin,"#0.00",12)+" Grad, gemessen in "+namemin);
    		Console.print("\nHoechste gemessene Temperatur:\t"+Console.format(tempmax,"#0.00",12)+" Grad, gemessen in "+namemax);
    		Console.print("\nDurchschnittstemperatur:\t"+Console.format(tempdschn,"#0.00",12)+" Grad");
    		Console.print("\n\n Weiterer Durchlauf? (J/N) ");	
    		antwort=Console.readString();
    		}while(antwort.equalsIgnoreCase("J"));
    		
    		
    	}
    }
    
     
    #1 limp, 14.11.07
    Zuletzt bearbeitet: 14.11.07
  2. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Weil Du tempmin mit 0 vorbrlrgt hast. Vielleicht sooltes Du tempmin mit Deiner maximal zulässigen und tempmax mit der minimal zulässigen vorbelegen?
     
  3. Novinger

    Novinger Braeburn

    Dabei seit:
    23.10.07
    Beiträge:
    43
    Sehe ich das richtig, dass Du in jedem Durchlauf tempmin und tempmax auf 0 setzt?
    Ich würde das nur einmal vor der for-Schleife machen und außerdem tempmin nicht auf 0 sondern auf einen recht hohen Wert setzen.
    Wenn tempmin gleich 0 ist, wie soll dann 10 als minimale Temperatur erkannt werden? (10 < 0?)

    Also eher so:

    tempmin=500;
    tempmax=0;

    for (int wiederh=1; wiederh<=durchl; wiederh++)
    {
    Console.print("Wetterstation "+Console.format(wiederh,"#00"));
    Console.print("\n------------------");
    do{
    Console.print("\nName? ");
    name=Console.readString();
    }while(name.equals(""));
    do{
    Console.print("\nTemperatur? ");
    temp=Console.readFloat();
    }while(temp<-30||temp>40);
    Console.print("\n\n");

    if(temp>tempmax) // von 0 aus größer werdend
    {
    tempmax=temp;
    namemax=name;
    }
    if(temp<tempmin) // von 500 aus kleiner werdend
    {
    tempmin=temp;
    namemin=name;
    }
    if(durchl==1)
    {
    tempmin=temp;
    tempmax=temp;
    namemax=name;
    namemin=name;
    }
    tempdschn=tempdschn+temp;
    }
     
  4. limp

    limp Kaiser Wilhelm

    Dabei seit:
    06.06.05
    Beiträge:
    178
    hi,

    ändert trotzdem nichts daran das der temporäre maximale/minimale wert bei nächster eingabe verworfen wird, außerdem werden die werten in der fussschleifen "do" bei eingabe der temperaturen nur in einem gewissen bereich akzeptiert.


    auch dir danke, aber eclipse meckert das die variablen nicht initialisiert werden sobald ich ihnen einen wert außerhab der schleife zuweise, es geht mittlerweile zwar, allerdings ändert deine lösung auch hier mein problem nicht - habe schon versucht mit zwischenwerten und dem befehl

    tempmin=0;
    tempmax=100;

    if(temp>=tempmin&&temp<=tempmax&&!(temp<=zwischenwert)
    {
    tempmax=zwischenwert
    }
    if(temp>=tempmin&&temp<=tempmax&&(!temp>=zwischenwert)
    {
    if(tempmin<zwischenwert)
    {tempmin=zwischenwert}
    if(tempmin>zwischenwert)
    {zwischenwert=tempmin}
    }

    Aber selbst das hilft nichts, ich möchte doch einfach nur bei zwei Eingaben von 10Grad und 20Grad, das 10 als tempmin und 20 als tempmax ausgegeben wirdo_O
     
  5. Novinger

    Novinger Braeburn

    Dabei seit:
    23.10.07
    Beiträge:
    43
    Dein tempmin ist zu klein würde ich sagen. Das solltest Du nicht mit 0 inititalisieren sonden mit einer großen Zahl, damit die eingegebene Temperatur auch wirklich kleiner als der Variablenwert sein kann.

    Also tempin = 100 und die Abfrage if (tempmin > zwischenwert) wird bei 10 Grad wirklich TRUE zurückliefern und tempmin wird auf 10 gesetzt.

    Es soll so aussehen, oder?
    Init:
    tempmin = 100
    tempmax = 0

    Eingabe von 10 Grad:
    tempmin > 10 -> tempmin = 10
    tempmax < 10 -> tempmax = 10

    Eingabe von 20 Grad:
    tempmin < 20 Grad -> tempmin bleibt auf 10
    tempmax < 20 Grad -> tempmax = 20

    Oder sehe ich da was falsch?
     
    limp gefällt das.
  6. limp

    limp Kaiser Wilhelm

    Dabei seit:
    06.06.05
    Beiträge:
    178
    siehst es richtig, und dank deines tippes tempmin zu erhöhen läuft das ganze jetzt, ich wusste doch, irgendeine winzige kleinigkeit kann manchmal eine menge einfluss auf den workflow haben :D

    danke dir recht herzlich, das gibt karma! :)

    trotzdem wurmt es mich den fehler nicht gleich selbst gefunden zu haben, nein, ich bastel 3std an ein und derselben stelle rum :p
     
  7. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Das hier ist unnütz:
    Code:
    if(durchl==1)
    {
        tempmin=temp;
        tempmax=temp;
        namemax=name;
        namemin=name;
    }
    durchl wird nur einmal von Dir besetzt.

    Edith möchte noch wissen, warum Du kein
    Code:
     
    um Deinen Code setzt. Mit Einrückungen läßt sich sowas leichter lesen.
     
  8. Novinger

    Novinger Braeburn

    Dabei seit:
    23.10.07
    Beiträge:
    43
    Das Problem kenne ich. :)

    Viel Erfolg noch mit Deinem Programm und einen schönen Abend!
     
  9. limp

    limp Kaiser Wilhelm

    Dabei seit:
    06.06.05
    Beiträge:
    178
    Danke, ebenso :)


    Kannte die Foren-Funktion "Code" nicht, werde ich gleich ergänzen. Den Durchl==1 benötige ich, falls ein User sich einen Spass erlaubt und nur einen Ort sowie Temperatur eingeben möchte, damit ist dieser eine Ort sowohl namemax als auch namemin sowie tempmax/tempmin.
     
  10. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Eben nicht. Lass den mal weg. Sollte trotzdem klappen.
     
    limp gefällt das.

Diese Seite empfehlen