Java < Java < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Aufgabe | Ich habe versucht ein eigenes Programm zu erstellen. Dieses ist nur eine MÖglichkeit, wie man sein Programm hätte aufbauen können.
package rechnerarchitektur;
public class MyInteger implements Cloneable {
private boolean[] bit = new boolean[32];
/** Creates a new instance of MyInteger */
public MyInteger() {
}
public MyInteger(int eingabe) {
//eingabe in eine Dualzahl umrechnen und im Feld bit[] speichern
//ein true steht dabei für eine 1 ein false für eine 0
//Das Bit mit dem kleinsten Index (0) ist das niederwertigste Bit
//Stellen Sie negative Zahlen hier im Zweierkomplement dar.
//Ergänzen Sie die Implementierung ab hier
}
public MyInteger clone() {
MyInteger ergebnis = new MyInteger();
for (int i=0; i < 32; i++)
ergebnis.bit[i] = this.bit[i];
return ergebnis;
}
public String toString() {
String ergebnis = new String();
String bit;
for (int i=31; i >=0; i--) {
if (this.bit[i]) {
bit = "1";
}
else {
bit ="0";
}
ergebnis = ergebnis + bit;
}
return ergebnis;
}
public int toDecimal() {
int ergebnis = 0;
//Das Objekt wieder in das Zehnersystem umrechnen
//.....
}
public void nachZweierkomplement() {
// Die Zweierkomplement-Operation auf das aktuelle Objekt anwenden
// Ergänzen Sie die Implementierung ab hier.
}
public MyInteger addieren(MyInteger zweiteZahl) {
//Zwei Zahlen (this und zweiteZahl) werden binär addiert
//das Ergebnis wird in einem neuen Objekt zurückgeliefert.
// Ergänzen Sie die Implementierung ab hier
}
public MyInteger subtrahieren(MyInteger zweiteZahl) {
//Zwei Zahlen (this und zweiteZahl) werden binär subtrahiert.
//Das Ergebnis wird in einem neuen Objekt zurückgeliefert
//Ergänzen Sie die Implementierung ab hier.
}
}
|
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Hallo,
ich habe ein Problem mein Programm funktioniert nicht richtig und ich schaffe es nicht die letzten Teile des Programmes zu programmieren, weil ich die WErte nicht miteinander nicht verarbeiten kann.
Bitte helft mir:
public class MyInteger {
public MyInteger(){
int meineTolleZahl = 91;
int meineanderetolleZahl = 35;
System.out.println(meineTolleZahl + " als Binär: " + getint2bin(meineTolleZahl));
System.out.println(meineanderetolleZahl + " als Binär: " + getint2bin(meineanderetolleZahl));
System.out.println("Als Integer: " + getbin2int(meineTolleZahl));
System.out.println("Als Integer: " + getbin2int(meineanderetolleZahl));
System.out.println(meineTolleZahl + " als 1ser Komplement in Binär: " + getEinerCompl(meineTolleZahl));
System.out.println(meineanderetolleZahl + " als 1ser Komplement in Binär: " + getEinerCompl(meineanderetolleZahl));
System.out.println(meineTolleZahl + " als 2er Komplement in Binär: " + getZweierCompl(meineTolleZahl));
System.out.println(meineanderetolleZahl + " als 2er Komplement in Binär: " + getZweierCompl(meineanderetolleZahl));
}
/**
* Ich habe das Problem, dass getbin2int nicht meine Variablen verarbeitet,
* weil dieser ein String verlangt und keinen int. Wenn ich das in einem string ändere,
* taucht das problem umgekehrt auf.
* Die Binärzahlen stimmen!!!
* Das Einerkomplement macht einen Fehler, wenn es ein Einerkomplement von 35
* umwandeln soll. Es muss nämlcih für 35, dass einerkomplement 11011100
* ausgegeben werden.
* @param zahl
* @return
*/
private static String getEinerCompl(int zahl){
int x = zahl;
String binary = Integer.toBinaryString(x);
binary = ("00"+binary).substring(8-binary.length());
String complement = binary.replaceAll("0","x").replaceAll("1","0").replaceAll("x","1");
return complement;
}
public static String getint2bin(int value) {
String result = "";
for (int i = 0; i < 32; i++) {
if (((value >>> (31 - i)) & 1) == 0) {
if (result.length() != 0)
result += "0";
} else
result += "1";
}
if (result.length() == 0)
result = "0";
return result;
}
public static int getbin2int(String value) {
int ret=0;
for (int i=0; i<value.length();i++) {
ret<<=1;
if (value.charAt(i)=='1') ret++;
}
return ret;
}
/**
* Das ZweierCompl wird für die Subtraktion der Dualzahlen benötigt.
*
* Problem im Zweierkomplement:
* Ich habe etwas dieses Programm verändert und dabei ist mir irgendwie
* ein Fehler in der Berechnung des Zweierkomplement unterlaufen.
* WEnn das Zweierkomplement für 91 berechnet wird, gibt der nun
* 00100101 aus, obwohl das Zweierkomplement: 10100101 lautet.
*/
public static String getZweierCompl(int zahl){
StringBuffer eingabe = new StringBuffer();
getbin2int(getint2bin(15));
eingabe.append(getEinerCompl(zahl));
String bin = eingabe.reverse().toString();
int i_bin = -1;
int ueberschlag = 1;
StringBuffer ergebnis = new StringBuffer();
for(int i=0;i<bin.length();i++){
i_bin = Integer.parseInt(bin.substring(i, i+1));
if(i_bin == 1 && ueberschlag==1){
ueberschlag = 1;
ergebnis.append(0);
}
if(i_bin == 1 && ueberschlag==0){
ueberschlag = 0;
ergebnis.append(1);
}else if(i_bin == 0 && ueberschlag == 1){
ueberschlag = 0;
ergebnis.append(1);
}else if(i_bin == 0 && ueberschlag == 0){
ueberschlag = 0;
ergebnis.append(0);
ergebnis.reverse().toString();
}
}
return bin;
}
/**
* Ich möchte nämlich die Dualzahlen
* (91+31), also 00100011+01011011 berechnen und dann auch das Ergebnis in
* Dezimal ausgeben.
*
*/
// public static int getAddititionMyInteger (int zahlA, int zahlB){
// StringBuffer eingabe = new StringBuffer();
//StringBuffer eingabe1 = new StringBuffer();
// eingabe.append(getbin2int(meineTolleZahl));
//eingabe.append(getbin2int(meineanderetolleZahl));
//}
/**
public static int getSubtraktionMyInteger(){
Hier möchte ich die Subtraktion der Dualzahlen durchführen.
Zum Beispiel 91-35, dass heißt, dass ich das Zweierkomplement von 35
benötige, um es dann mit 91 zu addieren.
Also das sieht dann folgendermaßen aus:
91: 01011011
+ Zweierkomplement von 35: 11011101
= (1) 00111000 DEr Überlauf 1 wird weg gelassen.
Es könnte auch andersrum gehen
35-91
Dualzahl 35 + Zweierkomplement von 91
Es müsste auch die Berechnung zweier negativen Zahlen möglich sein,
wie z. B. -91-35
also Zweikomplement von 91 + Zweierkomplement von 35
*/
public static void main(String a[]) {
new MyInteger();
}
}
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 15:09 So 13.01.2008 | Autor: | rainerS |
Hallo!
> ich habe ein Problem mein Programm funktioniert nicht
> richtig und ich schaffe es nicht die letzten Teile des
> Programmes zu programmieren, weil ich die WErte nicht
> miteinander nicht verarbeiten kann.
>
> Bitte helft mir:
>
>
>
> public class MyInteger {
>
> public MyInteger(){
> int meineTolleZahl = 91;
> int meineanderetolleZahl = 35;
> System.out.println(meineTolleZahl + " als Binär: " +
> getint2bin(meineTolleZahl));
> System.out.println(meineanderetolleZahl + " als Binär: "
> + getint2bin(meineanderetolleZahl));
> System.out.println("Als Integer: " +
> getbin2int(meineTolleZahl));
> System.out.println("Als Integer: " +
> getbin2int(meineanderetolleZahl));
> System.out.println(meineTolleZahl + " als 1ser
> Komplement in Binär: " + getEinerCompl(meineTolleZahl));
> System.out.println(meineanderetolleZahl + " als 1ser
> Komplement in Binär: " +
> getEinerCompl(meineanderetolleZahl));
> System.out.println(meineTolleZahl + " als 2er Komplement
> in Binär: " + getZweierCompl(meineTolleZahl));
> System.out.println(meineanderetolleZahl + " als 2er
> Komplement in Binär: " +
> getZweierCompl(meineanderetolleZahl));
>
> }
>
> /**
> * Ich habe das Problem, dass getbin2int nicht meine
> Variablen verarbeitet,
> * weil dieser ein String verlangt und keinen int. Wenn
> ich das in einem string ändere,
> * taucht das problem umgekehrt auf.
> * Die Binärzahlen stimmen!!!
Du wirfst in deinem Programm die beiden Darstellungen der Zahlen durcheinander. meineTolleZahl ist vom Typ int, und deine Binärzahlen stellst du durch den Typ String dar. Dann musst du aber auch die Binärzahl als String benutzen und abspeichern, zum Beispiel so:
int meineTolleZahl = 91;
int meineanderetolleZahl = 35;
String meineTolleZahlAlsBinär;
String meineanderetolleZahlAlsBinär;
meineTolleZahlAlsBinär = getint2bin(meineTolleZahl);
meineanderetolleZahlAlsBinär = getint2bin(meineanderetolleZahl);
System.out.println(meineTolleZahl + " als Binär: " + meineTolleZahlAlsBinär);
System.out.println(meineanderetolleZahl + " als Binär: " + meineanderetolleZahlAlsBinär);
System.out.println("Als Integer: " + getbin2int(meineTolleZahlAlsBinär));
System.out.println("Als Integer: " + getbin2int(meineanderetolleZahlAlsBinär));
> * Das Einerkomplement macht einen Fehler, wenn es ein ]Einerkomplement von 35
> * umwandeln soll. Es muss nämlcih für 35, dass einerkomplement 11011100
> * ausgegeben werden.
> * @param zahl
> * @return
> */
> private static String getEinerCompl(int zahl){
> int x = zahl;
> String binary = Integer.toBinaryString(x);
> binary = ("00"+binary).substring(8-binary.length());
> String complement =
> binary.replaceAll("0","x").replaceAll("1","0").replaceAll("x","1");
> return complement;
> }
Mir fallen zwei DInge auf: 1. solltest du deine eigene Funktion getint2bin nehmen und nicht Integer.toBinaryString(), und 2. geht das schief, wenn die zahl weniger als 6 binärstellen hat, denn du fügst mit "00" nur genau 2 Stellen hinzu.
> /**
> * Das ZweierCompl wird für die Subtraktion der Dualzahlen benötigt.
> *
> * Problem im Zweierkomplement:
> * Ich habe etwas dieses Programm verändert und dabei ist mir irgendwie
> * ein Fehler in der Berechnung des Zweierkomplement unterlaufen.
> * WEnn das Zweierkomplement für 91 berechnet wird, gibt der nun
> * 00100101 aus, obwohl das Zweierkomplement: 10100101 lautet.
Das liegt daran, dass deine Schleife nur von 0 bis bin.length()-1 läuft. Sie muss immer bis zur maximalen Stellenzahl (hier: 8) laufen.
Viele Grüße
Rainer
|
|
|
|