Programmierfehler?

Status
Nicht offen für weitere Antworten.
C

Ciaoman

Gast
public class FehlerFinden01
{

public static void main(String[] args) throws Exception
{
IntIO ea = new IntIO();
int z1 = ea.readInt("erste Zahl: ");
int z2 = (int) ea.readDouble("zweite Zahl: ");
if(z1 == z2) ea.writeln("gleich");
else ea.writeln("ungleich");
}
}


Was meinst ihr, läuft das so?? Oder kann man es noch irgendwie besser porgrammieren??
 

NTB

Bekanntes Mitglied
Zur besseren Lesbarkeit bitte nächstes mal die
Code:
-Tags verwenden.

Voraussgesetzt, die Klasse IntIO() ist bekannt, sollte das so laufen.
Warum liest Du einen Double, den Du dann sowieso sofort in einen int Castest? Das macht doch keinen Sinn.
Dadurch stellt sich dann auch die Frage, ob das Ergebnis tatsächlich das ist, was Du haben willst und nicht den Anwender etwas irritiert.
 
G

Gast

Gast
ah ja cool!!! Danke, man ich muss paar Sachen durchchecken für den Einstieg in JAVA und komm gar net klar!!

Wie hier, welche Anweisungen sind da richtig und welche alsch??

Wäre super wenn du mir helfen könntest...

Code:
  public static void main(String[] args) throws Exception
  {
    int t1 = 3;  //ja
    int t2 = '2'; //nein, falscher Datentyp
    //------------------------------------
    char c = 90;
    int i = -2;
    String s = "";
    String g = new String("Beispiel");
    String z = s.equals(g);
    String n = 'String';
    double d = 2;
    long l = 0;
    boolean b1 = ('a' == 'b');
    boolean b2 = 'a' == 'b';
    char m = "z";
  }
}
 

Leroy42

Top Contributor
Gast hat gesagt.:
Wie hier, welche Anweisungen sind da richtig und welche alsch??

Ist doch ganz einfach! Welche Anweisungen alsch sind, sagt dir
doch der Compiler.

Was dann daran alsch ist, mußt du schon selbst anhand der
Fehlermeldung herausbekommen.

Oder erwartest du jetzt von uns, das wir, mal so eben,
deine Hausaufgaben für dich machen? :noe:

Aber wenn du zu den Anweisungen deine Vermutungen
(mit Begründung) dazuschreibst, werden wir gerne
dazu Stellung nehmen. :)
 

NTB

Bekanntes Mitglied
Äh Ciaoman nur zu Deiner Info:
Wenn Du das, was ich Dir oben geantwortet habe, so in Deine Hausaufgaben schreibst, werden sie Dir allerhöchstwahrscheinlich als alsch bewertet!
 
G

Gast

Gast
Okay muss da echt paar Sachen machen die dann Prüfungsrelevant sind, deshalb würde ich gern nur richtige Sachen abgeben, hab da noch ne Aufgabe...

Code:
public class Zuweisungen01
{
  /*Ergänzen Sie das Programm unter dem Kommentarstrich 
    so, dass zum Schluss in der 
    Variablen c2 der zuerst eingegebene, in der Variablen
    c1 der zuletzt eingegebene Wert steht
  */
  public static void main(String[] args) throws Exception
  {
    IntIO intio = new IntIO();
    char c1 = intio.readChar("1. Zeichen eingeben: ");
    char c2 = intio.readChar("2. Zeichen eingeben: ");
    //-----------------------------------------------
    c1 = char c2;
    c2 = char c1;
    
  }
}

Ich denk das müsste so passen oder?? Ich finde Java irgendwie unpraktisch, oder ich bin zu doof um das zu verstehen...
 

Leroy42

Top Contributor
Ich sehe gerade, daß du ja bereits zu 2 Anweisungen deine Vermutung geschrieben hast.
Gast hat gesagt.:
Code:
int t1 = 3;  //ja
int t2 = '2'; //nein, falscher Datentyp
..

1) Richtig!
2) Nicht richtig. Einem int wird zwar ein char zugewiesen,
allerdings ist char ein Untertyp von int und somit
zuweisungskompatibel.

Es gibt auch keine Warnung, da ein int alles aufnehmen
kann, was ein char aufnimmt.

Code:
char t2 = t1;

würde aber fehlerhaft sein, da ein char nicht unbedingt
alles aufnehmen kann, was ein int aufnimmt.
 

Leroy42

Top Contributor
Code:
c1 = char c2; 
c2 = char c1;

Nein, das geht so nicht.

Nach der Zuweisung an c1 steht in c1 ja bereits das
drin, was zuvor auch in c2 gestanden hat ==> der ursprüngliche
Wert von c1 ist für immer verloren.

Lösung: Du mußt den Ursprungswert von c1 vorher retten,
sodaß du ihn später an c2 zuweisen kannst....

Viel Spaß beim Grübeln. :D

P.S. Das, was du hier machen mußt, ist in keiner anderen Sprache
anders, sogesehen ist Java nicht unpraktisch.
 

NTB

Bekanntes Mitglied
Das Programm läuft. Fein.
Der Kasus knaxus ist aber: Ist das Ergebnis, dass herauskommt, auch gleich dem, was der Anwender erwartet? Die Antwort auf diese Frage will Deine Lehrer bei der Aufgabe hören...

Zu Deinem Programm "Zuweisungen01":
Gehe mal JEDE Zeile in Deinem Kopf EINZELN durch und schreibe am besten auf, was dann in den einzelnen Variablen steht. Das Ergebnis postest Du dann hier.

...das ist jetzt aber auch genug Zaunpfahlgewinke.
 
G

Guest

Gast
NTB hat gesagt.:
Das Programm läuft. Fein.
Der Kasus knaxus ist aber: Ist das Ergebnis, dass herauskommt, auch gleich dem, was der Anwender erwartet? Die Antwort auf diese Frage will Deine Lehrer bei der Aufgabe hören...

Zu Deinem Programm "Zuweisungen01":
Gehe mal JEDE Zeile in Deinem Kopf EINZELN durch und schreibe am besten auf, was dann in den einzelnen Variablen steht. Das Ergebnis postest Du dann hier.

...das ist jetzt aber auch genug Zaunpfahlgewinke.


Ach du meinst das der Anwender hier verwirrt wird, da die ausgabe eher 1 ungleich 3 heißen sollte??


zu "Zuweisungen01":

wäre das so besser??

char c1 = x;
char c2 = y;
c1 = y;
c2 = x;
 

NTB

Bekanntes Mitglied
Anonymous hat gesagt.:
Ach du meinst das der Anwender hier verwirrt wird, da die ausgabe eher 1 ungleich 3 heißen sollte??

Nein.
Probier Dein Programm mal mit "3" und "3.5" aus.

Anonymous hat gesagt.:
zu "Zuweisungen01":

wäre das so besser??

char c1 = x;
char c2 = y;
c1 = y;
c2 = x;

Wo kommt denn jetzt das x und das y her? Mal bitte bischen mehr Programmcode.

Aber soviel sei schonmal gesagt: Du Stehst in Deiner Küche. Du hast vor Dir zwei Becher: BecherC1 und BecherC2. In BecherC1 ist Cola, in BecherC2 ist Milch.
Deine Schwiegermutter kommt und findet das doof. Sie will es andersrum haben.
Was tust Du, um die Cola in BecherC2 und die Milch in BecherC1 zu bekommen?
 

Leroy42

Top Contributor
NTB hat gesagt.:
Aber soviel sei schonmal gesagt: Du Stehst in Deiner Küche. Du hast vor Dir zwei Becher: BecherC1 und BecherC2. In BecherC1 ist Cola, in BecherC2 ist Milch.
Deine Schwiegermutter kommt und findet das doof. Sie will es andersrum haben.
Was tust Du, um die Cola in BecherC2 und die Milch in BecherC1 zu bekommen?

- Umziehen? :shock:

Im Ernst, das nenne ich mal einen passenden Vergleich! :D
 
G

Gast

Gast
Okay, Gleitkommazahlen kann das net vertragen, da wäre ein Floattyp von Nöten, oder?

Ja und zu deinem Becherbeispiel, dachte ich mir das auch so. Den Wert von char c1, leg ich in ne Variable x, und den Wert von char c2 in die Variable y. Danach tausche ich es so um dasc2 den wert x also den von c1 übernimmt und umgekehrt. Oder muss da anstatt x und y, int x oder int y stehen??

Des wäre ja wie bei dem Becherbeispiel also, einen oder 2 zusätzliche Becher (Variablen) hinzunehmen und dann umfüllen...
 

Leroy42

Top Contributor
Gast hat gesagt.:
Okay, Gleitkommazahlen kann das net vertragen, da wäre ein Floattyp von Nöten, oder?

Hääh!? Gleitkommazahlen sind doch dasselbe wie floats (Fließkommazahlen)

Gast hat gesagt.:
einen oder 2 zusätzliche Becher (Variablen) hinzunehmen und dann umfüllen...

Richtig!

Jetzt möchte ich aber sehen, wie du tatsächlich 2 (Rettungs/Hilfs-)Becher
benutzt, ohne vor Scham eine Etage tiefer zu versinken. :D
 

Marco13

Top Contributor
Leroy42 hat gesagt.:
Gast hat gesagt.:
Wie hier, welche Anweisungen sind da richtig und welche alsch??

Ist doch ganz einfach! Welche Anweisungen alsch sind, sagt dir
doch der Compiler.
Was soll denn dieses vorwurfsvolle kursiv-Schreiben von "alsch"? Wenn er "falsch" geschrieben hätte, wäre das ja nicht falcsh, sondern richtig. Man MUSS falshc flasch schreiben! :meld: :wink:
 

Tuvok

Mitglied
NTB hat gesagt.:
Aber soviel sei schonmal gesagt: Du Stehst in Deiner Küche. Du hast vor Dir zwei Becher: BecherC1 und BecherC2. In BecherC1 ist Cola, in BecherC2 ist Milch.
Deine Schwiegermutter kommt und findet das doof. Sie will es andersrum haben.
Was tust Du, um die Cola in BecherC2 und die Milch in BecherC1 zu bekommen?

Hoffentlich denkt er jetzt nicht aus dem Becher trinken ohne zu schlucken, umfüllen und den anderen Becher wieder befüllen :lol:

Sry, für Offtopic, aber das hat mich grad gereizt :)
Find das Beispiel übrigens auch sehr gut.
 
G

Gast

Gast
ja nein mir ist es schon klar das man da nen 3 Becher bzw. ne 3. Variable benutzen muss...

Geht das dann so?
char c1 = int x; also von c1 in int x
char c1 = char c2;
char c2 = int x;
 

schalentier

Gesperrter Benutzer
ja, aeh nein. also dein ansatz ist korrekt, nur ist es leider kein java.

um ein neuen becher zu holen, in den du "char" stecken kannst:
Code:
char neuer_becher;

um cola in den neuen_becher zu schuetten:
Code:
neuer_becher = cola_becher;

um milch in den colabecher zu kippen:
Code:
cola_becher = milch_tasse;

den letzten schritt bekommste nun auch noch hin ;-)

becher holen und was reinkippen geht auch kuerzer:
Code:
char x = a;

P.S. Das, was du hier machen mußt, ist in keiner anderen Sprache
anders, sogesehen ist Java nicht unpraktisch.

Code:
a,b = b,a

Und nun quizfrage: welche sprache ist das?
(sorry, den konnt ich mir net verkneifen...^^)
 
G

Guest

Gast
Code:
a,b = b,a

Und nun quizfrage: welche sprache ist das?
(sorry, den konnt ich mir net verkneifen...^^)

Ääääähm Mathe??? :cool: na immerhin... :D

mir ist es schon fast peinlich nochmal zu fragen, aber so passt des jetzt oder??

Code:
char x = c1;
    c1 = c2;
    c2 = x;
 

Marco13

Top Contributor
Mal ganz nebenbei: Zwei ints kann man auch OHNE temporäre Variable vertauschen:

int a = 4;
int b = 5;
a ^= b;
b ^= a;
a ^= b;

Bin mal gespannt, ob DAFÜR jetzt jemand eine passende Becher-Analogie findet :lol:

@schalentier: Wild geraten: LISP?
 
G

Gast

Gast
Okay mal vielen Dank. Wie gesagt ich muss des alles als Prüfungsvorbereitung machen. Und da ist noch so ne Aufgabe!!

Was meint man denn mit Syntax, hab das schon auf paar verschiedenen Tutorials durchgelesen und die Aufgabe dann so bearbeitet...

Code:
public class Zuweisungen03
{
  /*Sind die folgenden Zuweisungen syntaktisch korrekt? Falls nicht,
    weshalb nicht (s. Muster)?
    Wenn Sie etwas nicht verstehen und auch im Buch nicht
    finden, probieren Sie es aus!
  */
  public static void main(String[] args) throws Exception
  {
    int t1 = 3;  //ja
    int t2 = '2'; //nein, falscher Datentyp
    //------------------------------------
    char c = 'c'; //ja
    char b = c; // ja
    String s = "hallo"; //ja
    boolean r = s.equals("salut"); // ja
    boolean t = s == "salut"; // ja
    int i = 0; //ja
    int j = i + i; //ja
    //int k = j + k; // geht nicht, weil k nicht deklariert ist
	long l = i; //ja
	double d1 = 1.0 / 3; //ja
	//double d2 = 5 / 0; // Divisionen durch null sind unzulässig
    int f = new IntIO().readInt("Zahl eingeben: "); // ja

  }
}

Danke nochmal für die sehr sehr kompetente Hilfe, aber die hab ich auch bitter nötig - leider...
 
G

Gast

Gast
und genauso für meine andere Aufgabe...

Code:
public class Zuweisungen02
{
  /* Sind die folgenden Zuweisungen korrekt? Falls nicht,
   weshalb nicht (s. Muster)?
   Wenn Sie etwas nicht verstehen und auch im Buch nicht
   finden, probieren Sie es aus!
  */

  public static void main(String[] args) throws Exception
  {
    int t1 = 3;  //ja
    int t2 = '2'; //nein, falscher Datentyp
    //------------------------------------
    char c = 90; //ja
    int i = -2; //ja
    String s = ""; //ja
    String g = new String("Beispiel"); //ja
    String z = s.equals(g); // nein es fehlt die boolean Anweisung
    String n = String; //nein geht nicht, um n den Wert String zuzuweisen müsste das String in Anführungszeichen stehen
    double d = 2; //ja, aber der Datentyp "double" wandelt 2 in eine Gleitkommazahl um
    long l = 0; //ja
    boolean b1 = ('a' == 'b'); // ja
    boolean b2 = 'a' == 'b'; // ja
    char m = "z"; // nein, falscher Datentyp
   
  }
}



Also nochmal, ich will net das ihr meine Arbeit macht, ich will nur 100%-ig sicher sein, dass das was ich abgebe richtig ist...

Danke für die Antworten
 

Cole

Bekanntes Mitglied
Wenn ich das richtig sehe ist da ein Fehler bei Zuweisung03:

Code:
boolean t = s == "salut"; // ja
ist falsch, da 2 Strings (s und salut) nicht mit "==" überprüft werden, sondern mit equals.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben