# If-Schleife



## ByeBye 137835 (13. Juli 2005)

Hallo zusammen,
ich bin Anfänger mit Java und habe eigentlich nur ein kleines Problem nur für mich ist es ein großes. Ich habe mit System.getProperty( "java.version" ) die Java-Version ausgelesen und möchte nun folgendes tun.
Eine If-Schleife soll abfragen wenn die Version größer oder gleich Version 1.4 ist dann soll ein Text oder Meldung erscheinen mit Okay oder so und wenn die Version älter ist eine andere Meldung oder ein anderer Text.

Wie geht das?


----------



## Romsl (13. Juli 2005)

Hi,

dies ist aber mit Vorsicht zu genießen, da hier bei der Version immer nach dem zuletzt vorkommenden "." gesucht wird. Sollte die Version aber einmal eine solche "2.3_4.2" haben wirst du zangsläufig eine NumberFormatException bekommen. Darum solltest du das ganze noch ein wenig verfeinern.
Beispielsweise so auslesen und dann nachschauen ob wirklich nur ein Punkt und sonst nur "Zahlen" vorhanden sind.


```
public static void main(String[] args) throws Exception {
        String version = System.getProperty("java.version");

        int lastPoint = version.lastIndexOf(".");

        version = version.substring(0, lastPoint);

        double v = 0;
        try {
            v = Double.parseDouble(version);
        }
        catch (NumberFormatException e) {
            e.printStackTrace();
        }

        if (v < 1.4) {
            throw new Exception("Eine Fehlermeldung");
        }
    }
```


----------



## Thomas Darimont (13. Juli 2005)

Hallo!

 Ich würde das über die Klasse  *org.apache.commons.lang.SystemUtils* von http://jakarta.apache.org/commons/lang/ erledigen.
 Dort gibt es die Möglichkeit den "Rahmen" der aktuellen Java Version über Flags wie:
 static boolean *IS_JAVA_1_1* 
           Is true if this is Java version 1.1 (also 1.1.x versions).    static boolean *IS_JAVA_1_2* 
           Is true if this is Java version 1.2 (also 1.2.x versions).    static boolean *IS_JAVA_1_3* 
           Is true if this is Java version 1.3 (also 1.3.x versions).    static boolean *IS_JAVA_1_4* 
           Is true if this is Java version 1.4 (also 1.4.x versions).    static boolean *IS_JAVA_1_5* 
           Is true if this is Java version 1.5 (also 1.5.x versions).  
 abzufragen.

 PS.: Es gibt keine If-Schleifen sondern nur If-Blöcke ;-)

 Gruß Tom


----------



## Wurzelseppi (13. Juli 2005)

Könnte man auch so machen, aber Thomas´s Version ist denke ich sicherer :

<CODE>
String jVersion = System.getProperty("java.version");
        String jCompareVersion = "1.3.1_15";

        System.out.println(jVersion);
        if (jCompareVersion.compareTo(jVersion) >= 0)
        {

            System.out.println("jCompareVersion is >= der aktuellen Java-Version");
        }
        else
        {
            System.out.println("jCompareVersion is kleiner als die aktuelle Java-Version");
        }
</CODE>


----------



## Patrick Kamin (13. Juli 2005)

Thomas Darimont hat gesagt.:
			
		

> PS.: Es gibt keine If-Schleifen sondern nur If-Blöcke ;-)
> 
> Gruß Tom


[...] - Anweisung ;-)

Gruß Patrick


----------



## ByeBye 137835 (13. Juli 2005)

Wieso geht mein Quelltext nicht?

import java.awt.*;
import java.applet.Applet;

public class abfrage extends Applet 
{
  public void paint (Graphics g) 
{

    add( new Label( "Ihre Java-Version: " + System.getProperty( "java.version" ) ) );


if  ("java.version" == 1.4)
{
g.drawString("Hallo version", 20, 100);
}
else
{
g.drawString("asfh", 20, 120);
}
}
}

Es kommt immer diese Fehlermeldung:
C:\JAVA\BIN>javac abfrage.java
abfrage.java:12: operator == cannot be applied to java.lang.String,double
if  ("java.version" == 1.4)
                        ^
1 error

Was mache ich falsch?


----------



## Wurzelseppi (13. Juli 2005)

sonny1986 hat gesagt.:
			
		

> Wieso geht mein Quelltext nicht?
> 
> import java.awt.*;
> import java.applet.Applet;
> ...




Gruß,


Wurzelseppi


----------



## Romsl (13. Juli 2005)

Es liegt wahrscheinlich an einem grundlegenderen Problem. Vielleicht solltest du dich erst mal mit den primitiven Datentypen sowie mit String beschäftigen bevor du dich an die Applets ranwagst.

Der Compiler zeigt Dir im Prinzip ja schon wo der Hase vergraben ist.

Du kannst nicht einen String mit einem double vergleichen


```
if ("java.version" == 1.4)
```

das geht nicht.


----------



## Wurzelseppi (13. Juli 2005)

Romsl hat gesagt.:
			
		

> Es liegt wahrscheinlich an einem grundlegenderen Problem. Vielleicht solltest du dich erst mal mit den primitiven Datentypen sowie mit String beschäftigen bevor du dich an die Applets ranwagst.
> 
> Der Compiler zeigt Dir im Prinzip ja schon wo der Hase vergraben ist.
> 
> ...


 sorry, ja......Romsl hat´s besser formuliert.......

ein String ist in Java ein Objekt mit einer Struktur
und wenn du einfach 1.4 schreibst wandelt der Compiler das in den nativen Datentypen double um.......
und man kann kein komplexes Objekt mit einem nativen Typen vergleichen. Wenn, dann musst du eine Methode des Objektes aufrufen, die dir den Wert in einem nativen Datentyp zurückgibt.

z.B

Double.valueOf("1.4").doubleValue() == 1.4

da aber die System.getProperty("java.version") Methode einen String wie z.B "1.4.2_07" zurückgibt, kannst du den Wert nicht in ein Double umwandeln. 
Eine NumberformatException wäre hier das Resultat.


----------



## ByeBye 137835 (14. Juli 2005)

Vielen Dank für eure Beiträge.
Nun habe ich folgendes vor. Die String Variable myVersion und ich 1.4.2_08 die in der If-Anweisung steht in eine numerische Variable umzuwandeln und sie dann miteinander zu vergleichen. Nun die Frage:
Wie geht das?

Ich hoffe ihr könnt mir auch da weiter helfen.   
Danke.


----------



## Romsl (14. Juli 2005)

Wie schon gesagt, du kannst 1.4.2_08 nicht in eine "Number" umwandeln. Dort kommen zum einen zweimal Punkt vor und zum anderen dieser underscore.

Du kannst einen String mit einem Punkt und sonst nur "Zahlen" in:

double umwandeln:    double x = Double.parseDouble("1.4");
float umwandeln:       float x = Float.parseFloat("1.4);
int umwandeln:          int x = Integer.parseInt("1"); // nur ganzzahlig


----------



## Wurzelseppi (14. Juli 2005)

Was du machen könntest ist diesen ganzen String "1.4.2_07" seiner nicht-Nummerischen Zeichen zu entledigen. Du hättest dann in dem Fall 14207. Und das kannst du dann wieder mit einer anderen Zahl vergleichen.


----------



## ByeBye 137835 (15. Juli 2005)

Ja sowas habe ich mir auch schon vorgestellt. Jetzt nur noch die Frage, wie kann ich die nicht numerischen Zeichen herauslöschen oder filtern?


----------



## elmato (15. Juli 2005)

Hmm evt noch eine anderer Loesungvorschlag

```
public static void main(String[] args) {
	String g = "1.4.02_03";
	if(g.startsWith("1.4"))System.out.println("Stimmt");
	
	g = g.replaceAll("\\.", "").replaceAll("_", "");
	System.out.println(g);
	}
```
beim ersten Beispiel wird ueberprueft ob der String mit 1.4 anfaengt, das zweite beispiel zeigt diir wie du die nicht nummerischen Zeichen rausloeschst..
mfg


----------



## ByeBye 137835 (18. Juli 2005)

Nachdem ich nichts so richtig ans laufen bekomme nochmal ein Quelltext:

import java.awt.*;
import java.applet.Applet;

public class abfrage extends Applet 
{
 public static void main (String [] args)
{
String jVersion = System.getProperty("java.version");
String jCompareVersion = "1.3.1_15";

System.out.println(jVersion);
if (jCompareVersion.compareTo(jVersion) >= 0)
{

System.out.println("jCompareVersion is >= der aktuellen Java-Version");
}
else
{
System.out.println("jCompareVersion is kleiner als die aktuelle Java-Version");
}
}
}

Wieso zeigt er mir nichts an? Liegt das an: "public static void main (String [] args)"   
Bitte helft mir. Ich bekomme die Krise daran.
Vielleicht nochmal zum Verständnis. Er soll nur abfragen welche Java-Version vorhanden ist und je nachdem eine Meldung erzeugen.


----------



## ByeBye 137835 (18. Juli 2005)

Das gleiche Problem (es wird fehlerlos kompiliert aber nichts angezeigt) habe ich auch bei diesem Quelltext:

import java.awt.*;
import java.applet.Applet;

public class abfrage extends Applet 
{
public void paint (Graphics g) 
{
String myVersion = System.getProperty( "java.version" );
myVersion = myVersion.replaceAll("\\.", "").replaceAll("_", "");

int i = Integer.parseInt("myVersion");

if (i == 14208)
{
g.drawString("Ihre Java-Version ist aktuell.", 20, 100);
}
else
{
g.drawString("Ihre Java-Version ist nicht auf dem neusten Stand.", 20, 120);
}
}
}

Was könnt ihr mir dazu sagen?


----------

