Announcement

Collapse
No announcement yet.

Problem mit if-Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit if-Abfrage

    Hallo Zusammen,

    ich habe folgendes Problem bei meinem Miniprojekt in der Uni. Es soll eine Methode programmiert werden, welche ein Array an Temperaturen (double) übergeben bekommt. Die Methode soll den zweit höchsten Temperaturwert returnen. Hier erstmal die Methode:

    Code:
    	public double maxtemp(double[] temp)
    
    	{
    		
    		double maxtemp = -30.0;
    		double maxtemp2 = -30.0;
    		
    		for(int i = 0; i < temp.length; i++){
    			if(temp[i] > maxtemp){
    				maxtemp = temp[i];
    			}
    			if(temp[i] > maxtemp2 && temp[i] != maxtemp){
    				maxtemp2 = temp[i];
    				
    			}
    			
    			
    		}
    		return maxtemp2;
    		
    
    	}
    Das ganze funktioniert auch mit vielen Kombinationen jedoch nicht wenn folgendes in der Main-Methode übergeben wird:

    Code:
    	public static void main(String[] args) {
    		Miniprojekt2 m2 = new Miniprojekt2();
    
    		double[] temp = { 11.0, -10.0, 15.5, 15.5, 20.0, -10.0 };
    System.out
    				.println("maxtemp mit ( 11.0, -10.0, 15.5, 15.5, 20.0, -10.0) ergibt: "
    						+ m2.maxtemp(temp) + "°C");
    	}
    Die Methode returned mir in diesem Fall die -10 anstatt +15,5 und ich weiß gerade nicht wo mein Denkfehler sitzt. Eine Besonderheit noch: maxtemp darf nicht == maxtemp2 sein.

    Ich hoffe jemand kann mir helfen.

    Gruß

  • #2
    Wenn du das debuggst, siehst du warum das so ist.....

    Wenn die Schleife den 2. Wert von 15.5 bearbeitet, ist der maxtemp aufgrund des vorigen Durchlaufes schon 15.5. Die erste Bedingung trifft nicht mehr zu. Die zweite Bedingung trifft auch nicht zu, da 15.5 nicht unterschiedlich zu maxtemp ist. Im weiteren Verlauf wird also die -10 nicht mehr verändert.

    Besserer Weg:
    [highlight=java]
    public static double maxtemp(double[] temp)
    {
    Arrays.sort(temp);
    int pos=2;
    while(temp[temp.length-pos]==temp[temp.length-1])
    {
    pos++;
    }
    return temp[temp.length-pos];
    }







    [/highlight]
    Zuletzt editiert von Christian Marquardt; 05.11.2013, 18:01.
    Christian

    Comment


    • #3
      Super danke. Eine Stunde Kopfzerbrechen für sowas banales :-P ... Die Methode teste ich gleich mal

      Comment

      Working...
      X