Erste Schritte Deklarationen

kamazoom

Mitglied
Hallo,ich habe folgendes

Java:
class Zahl{
    public static void main (String[] args){
       int startzahl=Integer.parseInt (args[0]);
       int ergebnis = startzahl;

so weit so gut.
Ich interpretiere es so:
Zeile 1. Eine Klasse wird deklariert.
Zeile 2. eine Methode wird deklariert, die als parameter Einen Sring bekommt.
Zeile 3. Eine Variable wird deklariert, startzahl, der ein Wert zugewiesen wird , das wäre Null.
Zeile 4. Eine weitere varaible wird deklariert, der der Wert von Startzahl zugewiesen wird.

IST DAS Soweit richtig?

Wenn ja, was um Himmelswillen ist Integer.parseInt....habe ich noch nie gesehen, was bedeutet parse?
 
Zuletzt bearbeitet von einem Moderator:

langhaar!

Bekanntes Mitglied
IST DAS Soweit richtig?
Nein.

Der Parameter der Methode ist ein Array (eine Menge) von Strings.
Die Variable startzahl bekommt nicht null zugewiesen, sondern es wird das 1. Feld des Übergabearrays (das 1. Feld hat den Zugriff [0]) von String nach int umgewandelt.
Die Umwandlung von int nach String geschieht über Integer.parseInt.
 
Zuletzt bearbeitet:
N

nillehammer

Gast
Bitte Java-Code in Java-Tags einschließen. Dann liest es sich besser. Siehe der rote Text über dem eingabefeld oder durch Klicken des Tassen-Symbols.

Zeile 1. Eine Klasse wird deklariert.
Stimmt. Sie sollte aber public sein, damit das Programm gestartet werden kann.

Zeile 2. eine Methode wird deklariert, die als parameter Einen Sring bekommt.
Falsch, der Parameter ist ein String-Array

Zeile 3. Eine Variable wird deklariert, startzahl, der ein Wert zugewiesen wird , das wäre Null.
Falsch. Es wird tatsächlich eine Variable namens startzahl vom Typ int deklariert, dieser wird aber nicht Null zugewiesen. Vielmehr wird das erste Element des String-Arrays ausgelesen. Das ist vom Typ String und kann daher nicht ohne weiteres einer int-Variablen zugewiesen werden. Es wird hier versucht, aus dem String einen int zu parsen (klappt natürlich nur, wenn auch eine Ganzzahl in dem String steht)

Zeile 4. Eine weitere varaible wird deklariert, der der Wert von Startzahl zugewiesen wird.
Stimmt.

Wenn ja, was um Himmelswillen ist Integer.parseInt....habe ich noch nie gesehen, was bedeutet parse?
Das ist eine Hilfsmethode der Java-API. Genau der Klasse java.lang.Integer. Diese versucht, einen String in einen int umzuwandeln. Wenn in dem String eine Ganzzahl (und nur eine solche) steht, klappt das. Wenn nicht, gibt's eine Exception

Wenn Du eine IDE (z.B. Eclipse) benutzt, kannst Du Dir die Dokumentation (Javadoc) anzeigen lassen. Oder Du guckst hier: Java Platform SE 7

[EDIT]Mann tippe ich langsam! Oder langhaar schnell :D[/EDIT]
 

kamazoom

Mitglied
Wäre es dann nicht sinnvoller, direkt eine Methode zu deklarieren, die ein array mit integer-zahlen bekommt. Die Umwandlung ist doch ein wenig umständlich, oder hat das einen Sinn?
 

L-ectron-X

Gesperrter Benutzer
Die main()-Methode ist vorgegeben. Ihre Signatur kann nicht verändert werden, anderenfalls wird sie nicht mehr als die main()-Methode erkannt.
Aber du kannst natürlich das Programm so schreiben, dass du ihm int-Werte übergeben kannst.
 
S

SlaterB

Gast
entscheidend dabei ist, dass sie Parameter von der Kommandozeile interpretieren muss,
da kann alles mögliche eingegeben werden, Text, Zahl, Dateiname,
darauf muss allgemein reagiert werden
 

langhaar!

Bekanntes Mitglied
Wäre es dann nicht sinnvoller, direkt eine Methode zu deklarieren, die ein array mit integer-zahlen bekommt. Die Umwandlung ist doch ein wenig umständlich, oder hat das einen Sinn?

In deinem Beispiel-Fall brauchst du ja noch nich einmal ein Array. Wenn die main-Methode inklusive Parameter nicht fest vorgegeben wäre, würde man als Parameter natürlich genau einen int übergeben.
 
F

Firephoenix

Gast
Ja, die Main-methode hat immer ein String-Array als Parameter.
Dieses Array hat auch eine besondere Funktion: dadurch werden beim Programmstart Parameter eingegeben.

z.b. könntest du das kompilierte Programm so aufrufen:

Code:
java Zahl 1 2 3
im Programm hätte das String-Array dann Länge 3 und folgende Belegung:
[0]: "1"
[1]: "2"
[2]: "3"

in deinem Testprogramm würde dann also die Methode parseInt der Klasse Integer mit dem Parameter "1" aufgerufen. Dies hat einen int mit dem Wert 1 als Ergebnis.
Dieser int wird dann der int-Variable startzahl zugewiesen.
Weiterhin wird eine Variable ergebnis erstellt, die den Wert aus startzahl erhält, also ebenfalls 1.

Gibt man dem Programm keine Argumente mit dürfte eine ArrayIndexOutOfBoundsException geworfen werden wenn man auf args[0] zugreift.
Gibt man als 1. Parameter keine Zahl die einem int entspricht sondern etwas anderes ein, fliegt eine NumberFormatException beim parsen.

Gruß
 

kamazoom

Mitglied
Hallo, hier der Code, aber wo kann ich jetzt Zahlen eingeben für einen Test und wo?

Java:
public class EA1Zahlausdenken {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
       int startzahl = Integer.parseInt(args[0]);
      
       int ergebnis = startzahl;
       
       if (ergebnis > 0){
    	   ergebnis = ergebnis + 2;
       }
       else{
    	   ergebnis = ergebnis * (-1)+2;
       }
       while (ergebnis > 2){
    	   ergebnis = ergebnis - 2;
       }
       int arbeiten = 4;
       for ( int i= 2; i<= 20;i = i +2){
    	   arbeiten= arbeiten + startzahl;
       }
       switch (ergebnis){
       case 0 :System.out.println("Das kann nicht sein!");
               break;
       case 1 : System.out.println("Die ursprüngliche Zahl war ungerade!");
               break;
       case 2: System.out.println("Die ursprüngliche zahl war gerade!");
               break;
       default: System.out.println("Fehler!");       
       
        
       }
       System.out.println("startzahl="+ startzahl);
	}

}
 
B

bone2

Gast
Java:
java EA1Zahlausdenken 555
steht doch oben, das hier in der console eingeben beim start
 
T

TryToHelp

Gast
Du kannst deiner IDE die du verwändest für einen Run Parameter angeben, die dem Programm mitgegeben werden, quasi das was in dem Beitrag von bone2 steht nur ohne das Starten via Konsole, sondern aus der IDE raus
 
T

TryToHelp

Gast
Wenn du nicht beim Programmstart deine Zahl übergeben willst, musst du entweder einen Festen wert einstellen
Java:
int startzahl = 10
oder von der Konsole lesen mittels System.in lesen
Java:
BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
int startzahl = Integer.parseInt(buffer.readLine());
 

X5-599

Top Contributor
ALso erstmal muss es schon kompillierbar sein. Dann wie schon gesagt wurde kannst du per:
Run -> Run Configurations
unter dem Reiter "Arguments" Startparameter für dein Programm mitgeben.

Aber was für einen Compilerfehler bekommst du denn?
 

X5-599

Top Contributor
Das ist dann wohl ein Laufzeitfehler. Kein Compilerfehler. Du hast dann keine Startparameter mitgegeben. Das String Array bleibt dann "leer". Also size == 0. Somit ist der Index 0 nicht gültig.

Gib mal wie gesagt unter Run -> Run Configurations in das Arguments Textfeld eine 5 oder so ein.

Edit: In das "Program Arguments" Textfeld natürlich...
 
T

TryToHelp

Gast
Ist deine 14. Zeile die Zeile
Java:
int startzahl = Integer.parseInt(args[0]);
?

das liegt daran, das du versuchst auf den 1ten parameter zuzugreifen, den du nicht hast, wenn du nicht wie von mir oder X5-599 beschrieben etwas übergibst.

Run -> Run Configurations
unter dem Reiter "Arguments" Startparameter für dein Programm mitgeben.

und zwar als Startparameter z.B. die Zahl 10 mitgeben
 
T

TryToHelp

Gast
lies mal hier

Wenn du nicht beim Programmstart deine Zahl übergeben willst, musst du entweder einen Festen wert einstellen

Java:
int startzahl = 10

oder von der Konsole lesen mittels System.in lesen

Java:
BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
int startzahl = Integer.parseInt(buffer.readLine());
 

X5-599

Top Contributor
Für die Variante mit dem BufferedReader musst du in die Console von Eclipse klicken (da wo auch z.b. System.out.println()s erscheinen) und da eine 10 eingeben gefolgt von ENTER. Dadurch wird diese Zahl während der Laufzeit des Programms entgegengenommen.
 

kamazoom

Mitglied
Ok, ich habe das programm getestet, aber nur weil ich Integer.parseInt entfernt habe.

Was hat es damit auf sich, was passiert durch die zeile int startzahl=Integer.parseInt(args[0]);

Weiss es jemand?
 
B

bone2

Gast
wow...

liest du überhaupt was die leute hier schreiben? hier steht nun schon 3 oder 4mal wie du in eclipse einen startparameter einstellst, den sich dein programm dann versucht zu holen
 
T

TryToHelp

Gast
Also nochmal

Du bekommst einen String-Array beim Start deines Programmes übergeben, denn kannst du wie jetzt schon 100 mal beschrieben einstellen!

Du wandelst mit dieser Zeile den Ersten Eintrag des Arrays in einen Integer (Zahl) das war ein String so du ihn übergeben hast, was dir wie schon 200 mal erklärt wurde gemacht werden kann.

Lese doch bitte mal die Antworten die dir geschrieben wurden
 
K

KamazoomK

Gast
Sorry, aber trotzdem, dass ich alle Beiträge gelesen habe funktioniert es nicht.
Es funktioniert nur wenn ich die Umwandlung entferne.
Ich weiß nicht An welcher Stelle, und was ich einfügen muss.

Anders ich verstehe nicht was ich machen soll.

Liebe Grüße
 
S

SlaterB

Gast
und du hälst es dabei für sinnvoll, auf konktre Antworten, etwa
Posting #12 "java EA1Zahlausdenken 555/ steht doch oben, das hier in der console eingeben beim start "
dann mit "Es ist nicht kompilierbar....ich benutze eclipse...ich muss bestimmt noch was eingeben... "
oder später "Ich muss doch im Quellcode irgendwo der variablen Zahlen zuweisen....funzt aber nicht wie bei Pascal "
zu antworten?

du musst schon auf die Hilfen eingehen, weißt du was eine Konsole ist? wenn nicht nachfragen..,
um 763. Mal 'ich weiß von nix' zu schreiben bringt nichts..
 
F

Firephoenix

Gast
Das hier finde ich jetzt schon etwas krass:
Ok, ich habe das programm getestet, aber nur weil ich Integer.parseInt entfernt habe.

Was hat es damit auf sich, was passiert durch die zeile int startzahl=Integer.parseInt(args[0]);

Weiss es jemand?

Meine Antwort die ich DAVOR geschrieben hatte:
z.b. könntest du das kompilierte Programm so aufrufen:

Code:
java Zahl 1 2 3
im Programm hätte das String-Array dann Länge 3 und folgende Belegung:
[0]: "1"
[1]: "2"
[2]: "3"

in deinem Testprogramm würde dann also die Methode parseInt der Klasse Integer mit dem Parameter "1" aufgerufen. Dies hat einen int mit dem Wert 1 als Ergebnis.
Dieser int wird dann der int-Variable startzahl zugewiesen.
Weiterhin wird eine Variable ergebnis erstellt, die den Wert aus startzahl erhält, also ebenfalls 1.

Gibt man dem Programm keine Argumente mit dürfte eine ArrayIndexOutOfBoundsException geworfen werden wenn man auf args[0] zugreift.
Gibt man als 1. Parameter keine Zahl die einem int entspricht sondern etwas anderes ein, fliegt eine NumberFormatException beim parsen.
Gruß

Und eine 2. Antwort die ebenfalls DAVOR gepostet wurde:
[...] kannst du per:
Run -> Run Configurations
unter dem Reiter "Arguments" Startparameter für dein Programm mitgeben.
[...]

Das Schreiben funktioniert immer prächtig, aber warum hängt es so oft am Lesen???:L
 

kamazoom

Mitglied
Ich habe Run-> Runconfigurations als Argument eine Zahl eingegeben.Das geht.

mehrere Zahlen aufeinmal geht nicht, habe alles probiert. Ich dachte, ich kann ein array übergeben.

Folgendes habe ich als arguments eingegeben: java Zahl 1 2 3
Oder :[1,2,3]

oder:1,2,3

geht nicht....??
 
S

SlaterB

Gast
was geht dann nicht, welcher Quellcode soll was machen, wo tritt ein Fehler auf oder welches Fehlverhalten?

welches die richtige Eingabe mit der sinnvollsten Verwendung ist, hat Firephoenix geschrieben
 
T

TryToHelp

Gast
...
Code:
java Zahl 1 2 3
im Programm hätte das String-Array dann Länge 3 und folgende Belegung:
[0]: "1"
[1]: "2"
[2]: "3"
...

das java sowie Zahl sind befehle java zu starten, von der konsole, Zahl das ist dein Program zu starten und dann die parameter 1 2 3

also versuch es einfach durch

Code:
1 2 3

Also die Zahlen, ohne klammern,... ohne Strings wie z.b. java, Zahl, ... ohne Komma einfach nur Zahlen getrennt mit einem Lehrzeichen (die Große Taste auf der Tastatur ;-)
 
F

Firephoenix

Gast
Und nicht vergessen dann in deinem Programm auch args[1] und args[2] abzurufen falls du die Parameter erweiterst, args[0] ist nämlich immer der erste, egal ob dannach noch etwas kommt.

Gruß
 
B

bone2

Gast
oh oh... schreib dir mal eine neue klasse und dann füg in die main methode folgendes ein und füge beliebige parameter über Run-> Runconfigurations ein

Java:
        System.out.println("Anzahl der übergebenen Startparameter: " + args.length);

        for (int i = 0; i < args.length; i++) {
            System.out.println("Parameter " + i+ " (args[" + i+ "]) = '" + args[i] + "'");
        }
 

Jango

Gesperrter Benutzer
was geht dann nicht, welcher Quellcode soll was machen, wo tritt ein Fehler auf oder welches Fehlverhalten?

Lass es sein.
Der TO weiß nichts von Arrays und den anderen Dingen, die man so wissen sollte.
@ TO:
Erste Schritte ins Programmieren wäre angebracht. Dazu gibt es ohne Ende Literatur (frei, oder käuflich).
Auf alle Fälle solltest du beim nächsten Post hier wissen, wovon du überhaupt redest...
 

Ähnliche Java Themen

Neue Themen


Oben