division mit char
-
Na ja eigentlich führen viele Wege nach Rom aber bei der Division von chars sollte man schon aufpassen ... char kann nicht jede Zahl darstellen und die Division von Ganzzahlen ist auch nicht ganz unproblematisch (wegen den nichtvorhandenen Kommastellen etc.)
-
ich brauche das um zwei langzahlen zu addieren die folgendermassen aufgebaut sind
int Base
char[] digits
char Exponentdanke für die antwort
-
hallo
ich möchte zwei char addieren und einem char zuweisen wie mach ich das?
danke und gruss
stef
-
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 = 12dann 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
-
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. ]
-
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.
-
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 sindint Base
char[] digits
char Exponentdanke 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-systemfü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 kannGruß 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 = 1Na 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