division mit char



  • einfach 2 chars addieren und das Ergebnis in eine 3. speichern ist einfach:

    char b = 'x';
    char a = 'y';
    char y = a+b;
    

    aber frag mich bloss nicht, was dabei rauskommt 🙂

    oder willst du deren Inhalt addieren?
    also 5 + 7 = 12

    dann müßtest du deren Wert erstmal herausbekommen.
    Dafür bräuchstest du eine ASCII-tabelle.
    Darin siehst du dann, welche Zahl für welches Char steht.
    ich glaub das war irgendwie so:
    char dez.Zahl
    '0' 30
    '1' 31
    '2' 32
    '3' 33
    ...

    dann müßtest du um den Wert zu bekommen von dem Char immer 30 abziehen das ganze dann addieren und evtl wieder aufspalten (falls das Ergebnis über 9 ist).
    und die Ergebnisse dann wieder mit 30 addieren, um wieder die Richtigen Zeichen zu bekommen.



  • also ich habe zwei zahlen die in chars gespeichert sind

    wenn ich diese beiden addiere bekomme ich automatisch einen int wert. jetzt möchte ich aber diesen int wert wieder in einem char speichern. wie mach ich das.

    char a = 500;
    char b = 25;
    char c;

    c = a + b;

    so bekomme ich folgende fehlermeldung:
    "tes.java": Fehler #: 355 : Genauigkeitsverlust bei int, char ist erforderlich in Zeile 21, Spalte 7


  • Mod

    c = (char)(a+b);

    EDIT : Wenn du nur Zahlen addieren willst, dann solltest du kein char nehmen. Nimm ein long, int, short, byte oder so!

    [ Dieser Beitrag wurde am 04.01.2003 um 12:20 Uhr von Gregor editiert. ]



  • das problem ist das die aufgabenstellung vom Lehrer so lautet. Ich hätte bereits eine lösung mit int. aber jetzt muss ich alles abändern auf char.

    das problem von (char)(a+b) ist, dass es ein Ascii zeichen ausgibt da ja ein int wert zu einem char gecastest wird.

    [ Dieser Beitrag wurde am 04.01.2003 um 12:37 Uhr von stef editiert. ]


  • Mod

    Original erstellt von stef:
    **
    das problem von (char)(a+b) ist das Ascii zeichen ausgibt da du ja ein int wert zu einem char castest.**

    Was willst du mir hier sagen. ...char hat erstmal garnichts mit ASCII zu tun.

    ...gib mal ein Beispiel, an dem du zeigst, was der Fehler sein soll!



  • ok

    char a = 500;
      char b =12;
      char c;
      c= (char)(a+b);
    
      System.out.println(c);
    

    System.out gibt folgendene wert aus: ?

    sollte aber 512 ausgeben.


  • Mod

    Wenn es ein char ist, dann wird immer ein Zeichen ausgegeben. ...wenn eine Zahl ausgegeben werden soll, dann kannst du ja bei der Ausgabe nochmal casten:

    System.out.println ((int)c);



  • oh shit 🙄 ja klar !!

    sorry mein fehler.

    danke für deine nachhilfe lektion 😃

    edit: suppiii jetzt klappt alles so wie es sollte.

    [ Dieser Beitrag wurde am 04.01.2003 um 13:04 Uhr von stef editiert. ]



  • Original erstellt von stef:
    **ich brauche das um zwei langzahlen zu addieren die folgendermassen aufgebaut sind

    int Base
    char[] digits
    char Exponent

    danke für die antwort**

    stef,
    könnte es sein, daß Du die Aufgabe nicht richtig verstanden hast ?
    Ich nehem an, die Aufgabe heisst: addiere 123 und 10.
    DIe zahlen sollen dann aber wie folgt dargestellt sein
    123 * 10^1 und 1 * 10^1
    dann sähe die Zahl so aus
    1.) 2.)
    base = 10 10
    exponent = 1 1
    digits = ['1','2','3'] ['1']

    Das wären dan die member deiern Klasse myLong.
    Es fehlte dann noch die Methode add( myLong zahlA, myLong zhalB)

    method add (){
     int factor = 1;
     int digitpoiter = digits.length();
     long result = 0 ;
     //wandele digits in basis,:
     // beginne beim letzten Glied,
     // multipliziere digits[ digitpointer ] mit factor
        result += (int) digits [digitpointer] * factor;
     // hiuer gibts dann keine Probleme mit char to int !
     // decremntiere pointer ; incremtenier factor
     // dann das ganze mit base hoch exp behandeln
    

    Entespechend muss zahl zwei behandelt werden
    Allerdings hättest Du hier wieder die Probleme der Unegenauikeit bei long etc
    Denkbar wäre diese variante.
    fürs zehner-system

    füge für beide "Zahlen" in digits[] soviele '0' an, wie exponent angibt;
      Beginne "hinten":
          addiere beide "Zahlen"( und eventuellen Vortrag )(int)digit1[n] + (int) digti2[n) 
          schau, obs eine Überlauf gibt, und merken
          trag das (char) ergebnis im digit_result ein
    
    und leifere das Ergbenis
    

    Ich verstehe allerdingsd nicht, wieso Du char a = 500 schreibst.?
    Das macht doch vom design her keinen Sinn.
    mit char meine ich doch in der Regel etwas "anzeigbares" ?!
    Mann sollte die ganze Aufgabe kennen, ehe man richtig Stellung nehmen kann

    Gruß Hanns



  • Irgendwie hat das mit den Leerzeihen niht geklappt

    1.) 2.)
    base = 10 10
    exponent = 1 1
    digits = ['1','2','3'] ['1']

    sollte so aussehen
    1.)
    base = 10
    exponent = 1
    digits = ['1','2','3']
    2.)
    base = 10
    exponent = 1

    Na ja, ich war von addistion ausgegangen, aber genauso kanns du die methode "div" schreiben:
    dividiere zweis zahlen auf dem Papier, dann hast Du Deine MEthode
    Hanns
    🙂


Anmelden zum Antworten