Alles eine Typfrage

Hey Leute=),
Ich bin ein Neuling, also bitte nicht mit Steinen schmeißen.
Ich bin schon die ganze Zeit an einer Übungsaufgabe meiner Selbstvermittlung in dem Buch Schrödinger programmiert Java:

Die Aufgabe ist eigentlich ganz einfach du hast die Zahl 5354 und das System soll die Aussage true:false geben, ob die Zahl in den Datentyp passt:

Hier mein Code:


Java:
package de.datentypprüfung.miguel.java;


public class Datentypen {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
       
   
       
        Long a = Long.parseLong(args[0]);
        System.out.println("Die Zahl " + a + " passt in den Wertebreich von Long: " + (a>= Long.MIN_VALUE && a<= Long.MAX_VALUE));
        System.out.println("Die Zahl " + a + " passt in den Wertebereich von Integer: "+  (a >= Integer.MIN_VALUE && a <= Integer.MAX_VALUE));
        System.out.println("Die Zahl "+a+" passt in den Wertebereich von short: " +(a>= Short.MIN_VALUE && a<= Short.MAX_VALUE));
        System.out.println("Die Zahl "+a+ " passt in den Wertebereich von byte: "+ (a>= Short.MIN_VALUE&& a<= Short.MAX_VALUE));
        }
   

}
So AUA eigentlich sollte es so gehen kriege aber eine Fehlermeldung aufgrund fehlenden Parameter? Ja vielleicht ich muss ja den Wert deklaieren und a ist nur die Variable. Mit einem Scanner wäre es einfacher aber auch hier bin ich gescheitert mit der IF- Struktur die ich selbst anheften wollte. ( Ich hatte diese leider noch nicht. Möchte aber möglichst selbst Lösungen finden. wie bekomme ich das hin bzw. ist was am Code falsch, weil die Eclipse sagt ja es ist alles richtig.( Bevor mit einem großen Stein geschmissen wird ==> der Compiler gibt die freigabe zum kompilieren)
 
Zuletzt bearbeitet von einem Moderator:
Du meinst als Fehler sowas wie:
Code:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at de.javaforum.Datentypen.main(Datentypen.java:6)
(Namespace ist bei mir anders als bei Dir, Zeilennummer kann auch unterschiedlich sein....)

Also erst einmal zu dieser Fehlermeldung: Du Wertest das erste Argument aus, das mit übergeben wird. Wenn Du es ohne Parameter aufrufst, dann kommt dieser Fehler, denn args hat keine Elemente und damit halt kein Element 0 (welches das erste Element war).

Also musst Du es mit Parameter aufrufen. Das kannst Du z.B. per Kommandozeile machen. Mit aktuellem Java reicht dazu, dass Du im source Folder stehst und
Code:
javac de/datentypprüfung/miguel/java/Datentypen.java
java de.datentypprüfung.miguel.java.Datentypen 12345[/CODE]
startest.

Zu dem Code:
Der ist erst einmal Syntaktisch richtig. Aber es gibt zwei Dinge, die auffallen:
a) Wenn das Argument nicht in ein long passt, dann schlägt der parse Aufruf fehl und es wird eine NumberFormatException geworfen.
b) Bei der Prüfung auf Byte steht Short und nicht Byte.

Viele Grüße,

Konrad
 
Ich bin ein Neuling, also bitte nicht mit Steinen schmeißen.
Keine Angst, hier schmeißt in der Regel niemand mit Steinen. Viele (inkl. mir) verstehen das Forum als Hilfe zur Selbsthilfe. Es gibt also meist keine fertigen Lösungen, vielmehr wird gerade von Anfängern entsprechender Einsatz erwartet, weil der Lerneffekt größer ist. Wenn ich Deinen Kommentar richtig interpretiere, ist das Forum also genau das richtige für Dich :)

Inhaltlich hat @JustNobody eigentlich schon alles geschrieben, daher nur eine Bitte für die Zukunft: wenn Du Code postest, dann formatiert und in Code-Tags. Das geht über die drei Punkte neben dem Smiley in der Toolbar des Editors oder direkt im Text mittels [code=Java]Dein Code[/code].
 
Keine Angst, hier schmeißt in der Regel niemand mit Steinen. Viele (inkl. mir) verstehen das Forum als Hilfe zur Selbsthilfe. Es gibt also meist keine fertigen Lösungen, vielmehr wird gerade von Anfängern entsprechender Einsatz erwartet, weil der Lerneffekt größer ist. Wenn ich Deinen Kommentar richtig interpretiere, ist das Forum also genau das richtige für Dich :)

Inhaltlich hat @JustNobody eigentlich schon alles geschrieben, daher nur eine Bitte für die Zukunft: wenn Du Code postest, dann formatiert und in Code-Tags. Das geht über die drei Punkte neben dem Smiley in der Toolbar des Editors oder direkt im Text mittels [code=Java]Dein Code[/code].
okay vielen dank=)
 
Du meinst als Fehler sowas wie:
Code:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at de.javaforum.Datentypen.main(Datentypen.java:6)
(Namespace ist bei mir anders als bei Dir, Zeilennummer kann auch unterschiedlich sein....)

Also erst einmal zu dieser Fehlermeldung: Du Wertest das erste Argument aus, das mit übergeben wird. Wenn Du es ohne Parameter aufrufst, dann kommt dieser Fehler, denn args hat keine Elemente und damit halt kein Element 0 (welches das erste Element war).

Also musst Du es mit Parameter aufrufen. Das kannst Du z.B. per Kommandozeile machen. Mit aktuellem Java reicht dazu, dass Du im source Folder stehst und
Code:
javac de/datentypprüfung/miguel/java/Datentypen.java
java de.datentypprüfung.miguel.java.Datentypen 12345[/CODE]
startest.

Zu dem Code:
Der ist erst einmal Syntaktisch richtig. Aber es gibt zwei Dinge, die auffallen:
a) Wenn das Argument nicht in ein long passt, dann schlägt der parse Aufruf fehl und es wird eine NumberFormatException geworfen.
b) Bei der Prüfung auf Byte steht Short und nicht Byte.

Viele Grüße,

Konrad
okay ja das Paramenter wäre also in diesem Beispiel statt args[0 ] int 5354 . Der Autor erwähnt, dass die Fälle die du genannt hast noch bearbeitet werden==> bitte kein Spoiler; ich möchte das selbst erstmal probieren =P vielen dank für deine Antwort
 
Der Parameter ist ein String, kein int. In der Main ist es ja der Parameter: String[] args.
Daher ja auch die Umwandlung. Und String -> anderen Typ nennt sich "parsen" daher der Aufruf: Long a = Long.parseLong(args[0]);:
Das erste Element der args Arrays (Man fängt beim Nummerieren bei 0 an!) wird zu einem long übersetzt ("geparst", so man Denglisch sprechen will) und dann als Long gespeichert in der Variablen mit dem Namen "a".

Viel Spaß beim Probieren und weiter voran kommen.
 
Der Parameter ist ein String, kein int. In der Main ist es ja der Parameter: String[] args.
Daher ja auch die Umwandlung. Und String -> anderen Typ nennt sich "parsen" daher der Aufruf: Long a = Long.parseLong(args[0]);:
Das erste Element der args Arrays (Man fängt beim Nummerieren bei 0 an!) wird zu einem long übersetzt ("geparst", so man Denglisch sprechen will) und dann als Long gespeichert in der Variablen mit dem Namen "a".

Viel Spaß beim Probieren und weiter voran kommen.
vielen dank, das war das hilfreichste Kommentar. Ich übe jeden Tag auch im Urlaub und hänge Stunde um Stunde an jedem Schritt, da es nicht so einfach ist für mich, das zu lernen, aber es macht eine Menge Spaß und ich freue mich auf weitere 8 Stunden die ich mit den Kontrollstrukturen verbringe =)
 
Ich wünsche Dir viel Spass und Erfolg und vielen Dank für das positive Feedback. Ich freue mich, dass ich Dir weiter helfen konnte und mein Beitrag nützlich war.

Wenn Du wieder über irgendwas stolperst oder nicht richtig verstehst: Einfach wieder fragen. Die meisten hier versuchen Sachverhalte zu erläutern (Wobei es wie überall auch hier die Kategorie "ich poste einfach funktionierenden Code" gibt. Aber ich habe hier schon mehrere Mitglieder gesehen, die sich auch immer sehr bemühen, die Sachverhalte auf einfache Art und Weise zu erläutern und wo das Verständnis beim Fragenden im Vordergrund steht.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben