Fragen über Fragen, main-Methode und Co.

  • Themenstarter Themenstarter RagnaroekC
  • Beginndatum Beginndatum
R

RagnaroekC

Gast
Einen wunderschönen guten Tag,

ich habe ein paar Fragen im Bezug auf die main-Methode.
Gesucht und gefunden habe ich bei Google so einiges, so ganz schlau daraus werde ich leider nicht.

Die erste Frage ist, ist es korrekt, dass der Unterschied zwischen einem Aufruf und einem Übergabeparameter jender ist, dass der Aufrufparameter von Aufrufer bestimmt wird und der Übergabeparameter einer derer ist, die von z.B. Methoden übergeben werden?

Welche Rolle spielt der Übergabeparameter String args[] in der main Methode?
Ich habe gelesen, dass er wenn man das Programm aufruft, sofern ich das richtig verstanden habe, Parameter die man hinter den Aufruf schreibt mit in das Programm nimmt?
Wenn ja, wie sieht das aus? Kann ich dann einfach in meinem Programm auf args zugreifen?
Was würde in dem Fall args.length genau bedeuten?

Was würde passieren wenn ich mehrere Parameter hinter den Aufruf schreibe?
Und was würde dann wiederum mit args.length passieren?

Grüße,
Tim
 
hättest du bloß einen Computer mit dem du all das testen könntest, verschiedene Parameter, dann die Länge anschauen.. 😉

> Ich habe gelesen, dass er wenn man das Programm aufruft, sofern ich das richtig verstanden habe, Parameter die man hinter den Aufruf schreibt mit in das Programm nimmt?

du kannst doch nicht alles was du irgendwo liest, hinterfragen,
klingt das denn nicht plausibel/ deutlich?

--------

ich selbst wüßte den Unterschied zwischen Aufrufparameter und Übergabeparameter auch nicht,
warum möchtest du dich mit Benennungen aus verschiedenen Büchern aufhalten?
der nächste nennt es Methodenargumente bzw. es geht ja um die Main, also Programmargumente, auch Klärung nötig?

gut, du hälst das im Moment vielleicht für wichtigen unklaren Punkt: nein, ist es nicht,
eine Methode hat Parameter, Ende der Geschichte 😉
auch einer main-Methode kann man Parameter übergeben, fertig
 
Welche Rolle spielt der Übergabeparameter String args[] in der main Methode?
Ich habe gelesen, dass er wenn man das Programm aufruft, sofern ich das richtig verstanden habe, Parameter die man hinter den Aufruf schreibt mit in das Programm nimmt?
ja man kann, wenn man das Programm von der Konsole startet Werte mitgeben
Wenn ja, wie sieht das aus? Kann ich dann einfach in meinem Programm auf args zugreifen?
ja klar,
Was würde in dem Fall args.length genau bedeuten?
???:L was heißt den lenght? Also es ist die länge des Arrays, die Parameter stehen dir als array zur verfügung

Was würde passieren wenn ich mehrere Parameter hinter den Aufruf schreibe?
Und was würde dann wiederum mit args.length passieren?
sie sind alle im array, die länge entspricht der anzahl...

Für mich hört sich das schwer nach Hausübung an... kann das sein?
 
Genauer gesagt sind es die ersten Übungsblätter einer Klausur..
Und bedauerlicher Weise ist der Professor da sehr, sehr kleinlich.
Das mag daran liegen, dass er eigentlich kein "Java Professor" ist sondern Digitale Bildbearbeitung und Auswertung gelernt hat... Man muss bei ihm auch den Standartkonstruktor hinschreiben. Soweit ich weiß braucht man das eigentlich nicht weil der automatisch erzeugt wird.
Wie auch immer, es ändert nichts. Für ihn spielen diese Details eine Rolle.
Also muss ich da durch.

Ich hinterfrage alles, weil ich mir sehr unsicher bin was java angeht.
Im Skript steht es nur Stichpunkteartig und oft nur angerissen. Gefragt wird danach aber sehr wohl.


Aber Danke erstmal für die schnellen Antworten. Ein bisschen mehr Klarheit kann ich gerade sehr gebrauchen.

Den genauen Unterschied zwischen Aufruf und Übergabeparameter muss ich für die Klausur kennen.
Warum auch immer.. vielleicht ist es irgendwo wichtig.


zu dem .length. Wenn ich mehrere Strings in den Array verpacke, werden diese dann einfach aneinandergereiht? Etwas so: eingabe1eingabe2eingabe3 ?



Habe versucht es am Rechner aufzurufen, aber kann in der console das Programm nicht compilieren und weiß nicht wie man es im eclipse so ausführen kann, dass man es testen kann.. :/
vielleicht hat da ja wer einen tipp für mich. das ist eigentlich echt nicht mein thema ^^
 
zu Aufrufparameter vs. Übergabeparameter:
es gibt schlicht keine derartigen Fachbegriffe in Java, und niemand kann dir erklären wie du dein Skript zu verstehen hast,
google zeigt sich aber bisschen gnädig, wenn du es auch schon nicht selber bedienen kannst
(ich mecker wirklich viel in diesem Thread, danke schon dass du dich nicht über die erste Antwort beschwert hast 😉 )

Aufrufparameter -> wird in Zusammenhang mit main-Methode genannt
Übergabeparameter -> wird in Zusammenhang mit Methodenaufrufen innerhalb des Java-Programms genannt,
das KÖNNTE die richtigen Interpretation/ Unterscheidung sein

------

> Wenn ich mehrere Strings in den Array verpacke, werden diese dann einfach aneinandergereiht?
wenn du mehrere Strings in ein Array verpackst, dann hast du genau ein Array mit mehreren Strings,
nicht mehr und nicht weniger,
was sollte das mit Aneinanderreihung zu tun haben? wobei Aneinanderreihung wiederum zu definieren wäre,
falls Aneinanderreihung genau 'Strings in einem Array' heißt, dann wäre das ja richtig..
aber was sollte eingabe1eingabe2eingabe3 mit dem Array zu tun haben?

wenn ich drei Birnen in eine Einkaufstüte lege spreche ich ja auch nicht von BirneBirneBirne

------

Java-Fragen ohne Rechner.., na das kann ja heiter werden
 
zu dem .length. Wenn ich mehrere Strings in den Array verpacke, werden diese dann einfach aneinandergereiht? Etwas so: eingabe1eingabe2eingabe3 ?
Dein Ernst? Klausur, das heißt du studierst.. Wir haben Jänner... wir sind am Ende vom Semester und du fragst nach einem Array? Wenn ich der Prof wäre, würde ich bei den Klausuren auch sehr streng sein um auszusortieren ;-)

Habe versucht es am Rechner aufzurufen, aber kann in der console das Programm nicht compilieren
Da können wir helfen...
javac MeineKlasse.java
java MeineKlasse
und weiß nicht wie man es im eclipse so ausführen kann, dass man es testen kann.. :/
Man klickt doppelt auf das Programm Symbol drauf...
 
Ausprobieren in Eclipse kannst du das indem du deinem Programm die Parameter wiefolgt mitgiebst:

Run -> Run Configurations...
Dann auf Reiter "Arguments" klicken und die Parameter im Feld "Program arguments" eintragen. Mehrere Parameter werden mit Leerzeichen getrennt (genauso wie beim Aufruf über die Kommandozeile). z.B.
Parameter1 Parameter2 nocheinparameter

Gruß
 
zu Aufrufparameter vs. Übergabeparameter:
es gibt schlicht keine derartigen Fachbegriffe in Java, und niemand kann dir erklären wie du dein Skript zu verstehen hast,
google zeigt sich aber bisschen gnädig, wenn du es auch schon nicht selber bedienen kannst
(ich mecker wirklich viel in diesem Thread, danke schon dass du dich nicht über die erste Antwort beschwert hast 😉 )

Aufrufparameter -> wird in Zusammenhang mit main-Methode genannt
Übergabeparameter -> wird in Zusammenhang mit Methodenaufrufen innerhalb des Java-Programms genannt,
das KÖNNTE die richtigen Interpretation/ Unterscheidung sein

------

> Wenn ich mehrere Strings in den Array verpacke, werden diese dann einfach aneinandergereiht?
wenn du mehrere Strings in ein Array verpackst, dann hast du genau ein Array mit mehreren Strings,
nicht mehr und nicht weniger,
was sollte das mit Aneinanderreihung zu tun haben? wobei Aneinanderreihung wiederum zu definieren wäre,
falls Aneinanderreihung genau 'Strings in einem Array' heißt, dann wäre das ja richtig..
aber was sollte eingabe1eingabe2eingabe3 mit dem Array zu tun haben?

wenn ich drei Birnen in eine Einkaufstüte lege spreche ich ja auch nicht von BirneBirneBirne
Na endlich, das erklärt einiges. Es ist doch sonst immer alles genormt... xD
Gerade die vielen verschiedenen Verwendungen haben mich ja verwirrt.

>> wenn ich drei Birnen in eine Einkaufstüte lege spreche ich ja auch nicht von BirneBirneBirne
Nein, dann sind es drei Birnen in einer Einkaufstüte ^^..

Drei Strings in einem Array, okay. Das dachte ich mir. Aber irgendwie muss es ja gefüllt werden. Ein Array hat doch mehrere Felder, Regalfächer oder wie auch immer man sie nennen will.

Irgendwie muss er den Arbeitsspeicher ja nach einem gewissen Muster füllen.
Strings sind Zeichenketten, soweit so gut. Also haut er die Zeichen einfach nach einander da rein?
Woher weiß er dann, wo welcher String aufhört wenn man ihn dann im Programm benutzt? Wird das irgendwo gespeichert, sowas wie feld 0-15 String 1?

Tut mir leid wenn ich es so kompliziert mache, es ist für mich nur schwer vorstellbar. ^^



zu ARadauer
>Dein Ernst? Klausur, das heißt du studierst.. Wir haben Jänner... wir sind am Ende vom Semester und du fragst nach einem Array? Wenn ich der Prof wäre, würde ich bei den Klausuren auch sehr streng sein um auszusortieren <

Ich studiere Maschinenbau, richtig. 🙂
Es ist nicht ganz so schlimm wie es scheint, programmieren kann ich sogar halbwegs.
Ich versteh nur nicht was da genau passiert.
Es ist nicht schwer den Programmcode zusammen zu flicken das er läuft, nur würde ich gerne verstehen was da passiert. Die Klausur ist erst im März, also noch was hin. ^^

>Da können wir helfen...
javac MeineKlasse.java
java MeineKlasse<

mhm ja, habe ich schon versucht. javac funktioniert nicht. ich vermute er findet den pfad nicht, wo der compiler liegt? ich weiß nicht wie ich es anders ausdrücken soll. er kann mit javac nichts anfangen.
das liegt vermutlich daran, dass ich das programm aus dem eclipseordner geholt habe, kann das sein?

>Man klickt doppelt auf das Programm Symbol drauf... <
mhh.. Programmsymbol? Wo soll das sein?
Der Run Button (Grünes Playzeichen) ist es jedenfalls nicht. ^^

Ah, ich sehe gerade die neue Antwort von X5-599.
damit ist diese Frage beantwortet.

sehr gut, danke
 
Zuletzt bearbeitet von einem Moderator:
>> wenn ich drei Birnen in eine Einkaufstüte lege spreche ich ja auch nicht von BirneBirneBirne
Nein, dann sind es drei Birnen in einer Einkaufstüte ^^..

Drei Strings in einem Array, okay. Das dachte ich mir. Aber irgendwie muss es ja gefüllt werden. Ein Array hat doch mehrere Felder, Regalfächer oder wie auch immer man sie nennen will.

Irgendwie muss er den Arbeitsspeicher ja nach einem gewissen Muster füllen.
Strings sind Zeichenketten, soweit so gut. Also haut er die Zeichen einfach nach einander da rein?
Woher weiß er dann, wo welcher String aufhört wenn man ihn dann im Programm benutzt? Wird das irgendwo gespeichert, sowas wie feld 0-15 String 1?

Tut mir leid wenn ich es so kompliziert mache, es ist für mich nur schwer vorstellbar. ^^


Ich weiß nicht, ob ich deine Frage genau verstehe. IMO hilft es bei sowas wirklich das ganze nochmal etwas zu wiederholen und von Anfang an nochmal zu lernen.

So wie ich deine Frage verstehe: Ein Array hat in der Tat mehrere "Fächer"
In jedem der Fächer ist GENAU EIN Element. D.H. in einem String Array ist in jedem Fach genau ein String Objekt.
Jedes dieser String Objekte hat natürlich mehrere Buchstaben, aber es ist trotzdem ein Objekt.
Wie viel Speicher jedes dieser Objekte einnimmt hängt von der Länge ab, ist aber nicht wirklich wichtig für das Programmieren, wie der Speicher ganz genau aussieht.

Wenn du Jetzt z.B. ein Array erstellst: String[]{"hund", "birne", "apfel"}
dann ist im ersten Fach= "hund" im zweiten "birne" im dritten "apfel", zu beachten ist noch, das das erste Fach die Nummer 0 hat und nicht 1. Und die Länge des Arrays ist 3.
 
Zuletzt bearbeitet von einem Moderator:
@RagnaroekC
wenn es dir um die Speicherumsetzung geht, lohnt sich auch das mit einem Wort zu erwähnen..
bei Strings wie bei allen Objekten gilt:
das Array steht im Speicher hintereinander weg, genau 4 Byte pro Objekt,
jede 4 Bytes sind eine Referenz auf irgendeinen Ort im Heap, wo jeder String abgeschlossen für sich steht, in beliebiger Größe,
wobei das auch kompliziert ist, verschiedene String-Objekte können intern auf dasselbe große char[] verweisen
 
Genauer gesagt sind es die ersten Übungsblätter einer Klausur..
Und bedauerlicher Weise ist der Professor da sehr, sehr kleinlich.
Das mag daran liegen, dass er eigentlich kein "Java Professor" ist sondern Digitale Bildbearbeitung und Auswertung gelernt hat... Man muss bei ihm auch den Standartkonstruktor hinschreiben. Soweit ich weiß braucht man das eigentlich nicht weil der automatisch erzeugt wird.
Wie auch immer, es ändert nichts. Für ihn spielen diese Details eine Rolle.
Also muss ich da durch.

solche "profis" liebe ich ja ganz dolle ...

1) eine METHODE hat entweder PARAMETER ... oder eben nicht ... PUNKT
die von dir genannten begriffe wie aufruf- und übergabe- und methodenparameter und und und ... gibt es einfahc NICHT ... erkläre das mal bitte deinem dozenten ... und wenn er sagt es würde angeblich einen unterschied geben dann empfehle ihm mal bitte "Java ist auch eine Insel" ...

der einzige unterschied der mir persönlich einfallen würde ... der aber so sicher nicht gemeint ist : "programmparameter" ...
das sind die parameter die du einem programm beim starte von console *oder anderst* mitgibst ... und die bei java im String-Array von main landen ...
aber ich kann mir NICHT vorstellen das dein dozent das meint ... zu mal er ja scheinbar weder was vom programmieren allgemein noch von java im speziellen weis ...

2) standard-konstruktor
du hast absolut recht ... wenn du keinen standard-konstruktor schreibst baut ihn der compiler automatisch ein ... auch das kann dein dozent in der java insel nachlesen ...
es ist eh sinnlos diesen konstruktor in den code zu schreiben ...
die einzige ausnahme : man möchte z.b. ein singelton bauen und muss desshalb das instanzieren der klasse verhindern ... das macht man in dem man dann den konstruktor mit [c]private[/c] von außen abschirmt ...
ansonsten schreibst du konstruktoren noch wenn innerhalb dieser irgendwas passieren soll *ja ... dann macht sogar der standard-konstruktor sinn* oder wenn du konstruktoren mit parametern hast ...

aber nur um eine klasse zu instanzieren ... ohne das man etwas spezielles innerhalb des konstruktors macht *also der standard-konstruktor keine implementierung hat* kann man diesen weglassen -> ebenfalls java insel

3) Arrays
da würde ich dir noch mal einen blick in google empfehlen ... da ich mir gut vorstellen kann das du es bei einem solchen dozent nicht verstehst *mein beileid* ...
 
Danke! Wirklich, so langsam schließt sich der Kreis bei mir.
Nun verstehe ich auch genauer den Code arrayname[] = new int[16];
Die einzelnen Fächer sind Objekte des Typs int á 32Bit = 4Byte. Darum das new. Weil 16 Objekte angelegt werden. Habe mir so etwas schon gedacht, wahrscheinlich auch schon mal irgendwo gelesen, aber manche Dinge muss man eben zwei mal hören. 🙂




das Array steht im Speicher hintereinander weg, genau 4 Byte pro Objekt,
Im Arbeitsspeicher nehme ich an.
okay, klingt plausibel. einfach so wies kommt dann wohl.

jede 4 Bytes sind eine Referenz auf irgendeinen Ort im Heap, wo jeder String abgeschlossen für sich steht, in beliebiger Größe,

Jede 4 Bytes, also jedes Objekt zeigt auf einen Ort im so genannten heap, wo ich gerade nicht weiß was das ist. Aus wiki werde ich auch nicht wirklich schlau. Irgendwo muss der "heap" ja physisch ansässig sein.

Hört sich fast so an wie.. ist der heap auch im Arbeitsspeicher?


wobei das auch kompliziert ist, verschiedene String-Objekte können intern auf dasselbe große char[] verweisen

ich nehme mal an das ist irgendwas um Ressourcen zu sparen und würde den rahmen hier sprengen?



@irgendjemand
da gab es angeblich sogar schon diskussionen nach der klausur wegen punkteabzug beim "fehlenden" standartkonstruktor. geändert hat es nichts. einmal saßen wir satte 40 minuten untätig in der vorlesung weil er es nicht geschafft hat ein java programm zum laufen zu bringen. das programm zwar schon lange richtig, er hatte jedoch das speichern vergessen. ich glaube das war bei JOE und da muss man ja vor dem ausführen speichern... ^^ Sonst ist er aber immerhin sehr nett. Ein bisschen zerstreut. Ist eigentlich schade, dass er es nicht kann/vermitteln kann.

Ich denke das mit den "Programmparametern" passt!
Wahrscheinlich ist das die Lösung der Frage.
Vermutlich ist damit von ihm der "Aufrufparameter" gemeint. Werde das vor der Klausur noch abklären müssen. Immerhin habe ich mich jetzt genug damit auseinander gesetzt. Unvorbereitet gehe ich mit so Fragen nur ungerne hin. Warum dies gemeint sein kann ist, weil er Wissenschaftliche Mitarbeiter hat die von Java wesentlich mehr verstehen. Darum denke ich wird dies damit gemeint sein.

Das passt auch zu den Übungen. Unpassend dann aber die Namen, die stammen dann mit hoher Wahrscheinlichkeit vom Prof. und wurden in die Übungsblätter integriert. Und somit schließt sich der Kreis.

Punkt zwei werde ich mir die Tage in Ruhe ansehen.
Und zu Punkt drei, ich habe mir alles was ich über Java weiß durch google und bücher selbst bei gebracht. Bei den Vorlesungen habe ich nichts so richtig verstanden. Das liegt aber auch daran, dass mein Vorwissen da miserabel war, schätze ich.


Auf jeden Fall danke an alle schon mal für eure Hilfe hier!
Macht so echt mehr Spaß als wenn man ständig unsicher ist.
 
Darum das new. Weil 16 Objekte angelegt werden.
Ne, nicht ganz. Es wird ein Objekt angelegt (Du hast ja auch nur ein mal new). Und zwar ein Array. Nur, dass ein Array intern aus mehreren Fächern besteht. Diese speichern in dem Fall 16 Datensätze á 4 Byte, das ist korrekt. Und ein int ist kein Objekt, es ist ein primitiver Datentyp. Also verwechsle das nicht. All das was hier gesagt wird über 4-Byte-Referenz und Heap usw, das trifft nur zu falls die Datensätze des Arrays komplexe Datentypen sind, zB String. Aber nicht int, da gibt's keine Referenzen. Dummerweise belegt ein int zufälligerweise 4 Byte, genauso wie eine Referenz. Aber zB ein byte-Array belegt pro Fach nur 1 Byte.

das Array steht im Speicher hintereinander weg, genau 4 Byte pro Objekt,
Im Arbeitsspeicher nehme ich an.
Ja. Aber nochmal: 4 Byte pro Objekt, damit ist gemeint 4 Byte pro Referenz auf ein Objekt, und zwar nur dann wenn das Array Datensätze von komplexem Datentyp enthält.

ist der heap auch im Arbeitsspeicher?
Genau

wobei das auch kompliziert ist, verschiedene String-Objekte können intern auf dasselbe große char[] verweisen
ich nehme mal an das ist irgendwas um Ressourcen zu sparen und würde den rahmen hier sprengen?
Jup, aber das ist für den Anfang echt nicht wichtig genau zu wissen
 
Hey, danke für die Korrektur.
Okay, soweit ist dann alles klar. Nun habe ich auch schon die nächste Frage.

Es geht gerade darum mittels JOptionPane zwei Zahlen einzulesen und diesen mittels einem Operator zu verarbeiten.

Zum einlesen habe ich
Java:
String zahl1 = JOptionPane.showInputDialog(null, "Zahl 1 eingeben.", "Zahl 1", JOptionPane.PLAIN_MESSAGE)
verwendet.
Diese wird meiner Kenntnis nach dann in einem String gespeichert wodurch die Verwendung erst dann möglich ist, wenn man sie in Integer umwandelt, was mittels
Java:
int x = Integer.parseInt(zahl1)
; bei mir realisiert wurde.

Soweit so gut, Problematisch wird das ganze beim Operator.
Wie kann ich den String in einen Charakter umwandeln um ihn in einer switch-case Anweisung (nennt man das so?) verwenden zu können?

Ich habe mir diese 1:1 aus der insel heraussuchen können:


Java:
  switch ( op ) 
		  { 
		    case '+': 
		      System.out.println( x + y ); 
		      break; 
		    case '-': 
		      System.out.println( x – y ); 
		      break; 
		    case '*': 
		      System.out.println( x * y ); 
		      break; 
		    case '/': 
		      System.out.println( x / y ); 
		      break;
}
 
Wie kann ich den String in einen Charakter umwandeln um ihn in einer switch-case Anweisung (nennt man das so?) verwenden zu können?
Du kannst einen String nicht in einen Charakter umwandeln, denn ein String ist eine Folge von mehreren Charactern. Aber eine Umwandlung ist auch gar nicht nötig. Denn zumindest seit Java 7 funktioniert das switch-statement auch auf Strings:

Java:
switch(string){
   case "Hallo": /* do sth */ break;
   case "Ciao": /* do sth */ break;
}

Kann aber sein dass du nicht Java 7 verwendest, und dann geht das nicht. Und generell ist ein switch eine eingeschränkte Kontrollstruktur. Neben switch-Statements gibt es eine andere, allgemeinere und auf mehr Fälle anwendbare Kontrollstruktur: Das if(-else)-Statement. Mit Kombination der Methode equals(), welche zwei Werte gegeinander abgleicht, kannst du dann schreiben:

Java:
if(string.equals("Hallo"){
   // string enthält text "Ciao"
}
else if(string.equals("Ciao"){
   // string enthält text "Ciao"
}
else{
   // string ist weder "Hallo" noch "Ciao" sondern irgendwas anderes
}
 
Stimmt, Java 7 habe ich noch nicht.

Dann ist die schwierigkeit dieser Frage wahrscheinlich überholt.

Wie hat man es zu Zeiten vor Java 7 gemacht, weil ich denke die schreiber dieser Übungen wollten, dass man dies hier lernt.

Noch einmal die Aufgabe. Zwei Zahlen einlesen, eine Rechenoperation einlesen (-+.. usw) und die beiden Zahlen mit dieser verrechnen.
Ich muss nun nur noch wissen wie man charakter mittels JOptionPane.showInputDialog einliest und dann benutzt.

Das if else if kenne ich. Warum verwendet man switch-case, ist eines schneller?

Grüße
 
Aufrufparameter vs. Übergabeparameter:
Also soweit ich weis gibt es da schon einen Unterschied aber in Zeiten von mehr oder weniger guten IDEs spricht da anscheinend kein Mensch mehr von...
Aufrufparameter sind die Parameter, die per Deklaration von einer Methode verlangt (erwartet) und in dieser dann auch verwendet werden bzw. verwendet werden können - z.B. ein Objekt der Klasse CharSequence.
Übergabeparameter sind nun die Parameter, die man real an die Methode übergibt - z.B. ein Objekt der Klasse String. Sicher, dabei geht es nun mehr um die Klassen der Parameter um deren Inhalt aber trotzdem bleiben es Parameter. Eine IDE würde niemals meckern, wenn ich einer Methode, die mindestens eine CharSequence erwartet, einen String bekommt. Das Problem taucht erst auf, wenn ich innerhalb der Methode dann auch noch auf den Parameter als String zugreifen möchte.
 
Wie hdi oben geschrieben hat. Strings kannst du nicht mit == vergleichen sondern musst das über die Methode equals machen.
 
Um nochmal auf die switch Sache zurückzukommen. Wenn du den Operator ausliest, kannst du es so machen:

Java:
String operator = JOptionPane...//usw
char op = operator.charAt(0);
switch(op)
{
case '+':
System.out.println("addieren");
break;

case '/':
System.out.println("dividieren");
break;
}

Gruß
 
Ah, clever. Einfach das erste Zeichen einlesen des Strings... und da es ja nur ein Zeichen gibt. Easy, okay. Gewusst wie.

Nun habe ich noch ein Problem in diesem Programm, wo mir die Ursache ein Rätsel ist.

Java:
import javax.swing.JOptionPane;


public class jpane {

	public static void main(String args[])
	{
		
		// Operation 
		
		String zahl1 = JOptionPane.showInputDialog(null, "Zahl 1 eingeben.", "Zahl 1", JOptionPane.PLAIN_MESSAGE);
		String zahl2 = JOptionPane.showInputDialog(null, "Zahl 2 eingeben.", "Zahl 2", JOptionPane.PLAIN_MESSAGE);
		String operator = JOptionPane.showInputDialog(null, "Operation eingeben.", "Operation", JOptionPane.PLAIN_MESSAGE);
		int x = Integer.parseInt(zahl1);
		int y = Integer.parseInt(zahl2);
		
	
		char op = operator.charAt(0);
		 
		  switch (op)  
		  { 
		    case '+': 
		      System.out.println( x + y ); 
		      break; 
		    case '-': 
		      System.out.println( x – y );     // An dieser Stelle meckert er: The primitive type
                                              //  int of  x does not have a field y
	                                         // Syntax error on token "Invalid Character", . expected

	at jpane.main(jpane.java:27)
		      break; 
		    case '*': 
		      System.out.println( x * y ); 
		      break; 
		    case '/': 
		      System.out.println( x / y ); 
		      break;
	}
	}
}
 
So wie ich das sehe hast du für die case-Anweisung das "richtige" Minus verwendet ( ASCII 45 dez. , 002D hex. ).
Für die Ausgabe im println hast du einen Unicode n-Dash ( 8211 dez. , 2013 hex. ).

Das müsste es sein.
Gruß
 
Ich möchte den Inhalt eines Strings auf seinen Datentypen überprüfen.
Also ob es sich um eine Zahl, ein Zeichen oder einen Buchstaben handelt.
Wie kann ich das Problem angehen?
 
Das hier schaut garnicht so übel aus.

static boolean isDigit() Handelt es sich um eine Ziffer zwischen 0 und 9?
static boolean isLetter() Handelt es sich um einen Buchstaben?
static boolean isLetterOrDigit() Handelt es sich um ein alphanumerisches Zeichen?

Meinste das?

In der Aufgabe heißt es, man soll "Die Methode soll den Logarithmus einer Zahl zu einer beliebigen Basis berechnen." Und naja, beliebige Basis kann ja eig auch e, 10 usw. sein. vielleicht mach ich das hier gerade aber auch viel zu kompliziert und es ist eigentlich ganz einfach gedacht.
 
Hey,

hab noch ne Frage.

was hast (char)255 mit expliziter Typkonvertierung zu tun?
Zumindest vermute ich, dass es etwas damit zu tun hat.

gibt man (char)255 aus, so liefert es ein Zeichen (vermutlich UNICODE stelle 255?).

ihr könnt euch ja vorstellen wie "super" man nach "(char)255" googeln kann. ^^
Darum wärs nett wenn mir das kurz wer erklären könnte.
 
> was hast (char)255 mit expliziter Typkonvertierung zu tun?

hast du eine Definition für 'expliziter Typkonvertierung' oder kannst du das irgendwie in Worte + Beispiele fassen?
ergibt sich daraus nicht automatisch, dass (char)255 genau das ist?
 
äh ja, ich versteh darunter, dass man dem compiler explizit sagen muss, dass er einen größeren datentypen in einen kleineren packt auch wenn dies einen datenverlust zur folge hat.

zb. double in int.

also.. ich kann mit (char)255 nichts anfangen.
warum muss er nen Zeichen in Char explizit "rein drücken" obwohl chars doch für Zeichen sind ???:L
 
so klingt die Frage schon viel intelligenter 😉
Zahlen im Quellcode wie 255 sind nunmal keine Zeichen, sondern Zahlen, standardmäßig int bis 2 Mill.,
für den begrenzen kleinen char-Datentyp muss also genauso mit Datenverlust aufmerksam gekürzt werden, wie double in int
 
so ganz klar ist es mir immernoch nicht, was genau passiert bei zB (char)250?
Der int-Wert 250 wird in einen entsprechenden char-Wert gecastet. Jeder char ist einer bestimmten Dezimalzahl zugeordnet. Intern ist ein char eigentlich auch nichts anderes als ein int. Der Unterschied ist nur wie der Compiler den Wert betrachtet - ob als Zahl, oder als Zeichen.

Java:
int i = 250;
char c = 250;
System.out.println(i);
System.out.println(c);
 

Zurück
Oben