• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Java-Problem- benötige Hilfe - Kopf explodiert

limp

Kaiser Wilhelm
Registriert
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"));
		
		
	}
}
 
Zuletzt bearbeitet:

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Weil Du tempmin mit 0 vorbrlrgt hast. Vielleicht sooltes Du tempmin mit Deiner maximal zulässigen und tempmax mit der minimal zulässigen vorbelegen?
 

Novinger

Braeburn
Registriert
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;
}
 

limp

Kaiser Wilhelm
Registriert
06.06.05
Beiträge
178
Weil Du tempmin mit 0 vorbrlrgt hast. Vielleicht sooltes Du tempmin mit Deiner maximal zulässigen und tempmax mit der minimal zulässigen vorbelegen?

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.


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;

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
 

Novinger

Braeburn
Registriert
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?
 
  • Like
Reaktionen: limp

limp

Kaiser Wilhelm
Registriert
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
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
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.
 

Novinger

Braeburn
Registriert
23.10.07
Beiträge
43
Das Problem kenne ich. :)

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

limp

Kaiser Wilhelm
Registriert
06.06.05
Beiträge
178
Das Problem kenne ich. :)

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

Danke, ebenso :)


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 um Deinen Code setzt. Mit Einrückungen läßt sich sowas leichter lesen.

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.
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
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.
Eben nicht. Lass den mal weg. Sollte trotzdem klappen.
 
  • Like
Reaktionen: limp