Ich versuche, zwei DNumber-Objekte in der Methode add (DNumber b) hinzuzufügen. Der Punkt ist, binäre Arithmetik ausführen zu können. Die Elemente werden normal gespeichert. Wie sollte ich mit ArrayLists umgehen, die nicht gerade sind? Füllen Sie den einen mit weniger Elementen mit 0s ?. Wie soll ich dann jedes Element abrufen? Auch was wäre eine gute Möglichkeit, in Dezimal konvertieren, ohne die Konvertierung in Dezimal-Methode:Hinzufügen von zwei Array-Objekten
public class DNumber{
ArrayList<Digit> binary = new ArrayList<Digit>();
/**
* Constructor for objects of class DNumber
*/
public DNumber()
{
Digit num = new Digit(0);
binary.add(num);
}
public DNumber(int val){
int num = val;
if(num > 0){
while (num > 0){
Digit bin = new Digit(num%2);
num /= 2;
binary.add(0, bin);
}
}
else{
Digit bin = new Digit(0);
binary.add(0,bin);
}
}
/**
* An example of a method - replace this comment with your own
*
* @param y a sample parameter for a method
* @return the sum of x and y
*/
public String toString(){
String s = "";
for(Digit d : binary){
s = s + d.toString();
}
return s;
}
public void add(DNumber b){
int ArraySize1 = binary.size() -1;
int ArraySize2 = b.binary.size() -1;
}
public void toDecimal(){
/**
*
* String s = "";
int result = 0;
int power = 0;
for(Digit d : binary){
s = s + d.toString();
result = Integer.parseInt(s);
}
*/
}
}
public class Digit {
int x = 0;
/**
* Constructor for objects of class Digit
*/
public Digit(int val) {
if (val != 0 && val != 1) {
System.out.println("Error Must be either 1 or 0");
x = 0;
} else {
x = val;
}
}
/**
* An example of a method - replace this comment with your own
*
* @param y a sample parameter for a method
* @return the sum of x and y
*/
public int getValue() {
return x;
}
public void setValue(int num) {
if (num != 0 && num != 1) {
System.out.println("Error Must be either 1 or 0");
System.out.println("Old Value Retained");
} else {
x = num;
}
}
public String toString() {
return Integer.toString(x);
}
public Digit add(Digit b) {
int returnInt = getValue() + b.getValue();
Digit carry = new Digit(0);
if (returnInt == 2) {
carry = new Digit(1);
setValue(0);
} else if (returnInt == 1) {
carry = new Digit(0);
setValue(1);
} else if (returnInt == 0) {
carry = new Digit(0);
setValue(0);
}
return carry;
}
public Digit add(Digit b, Digit c) {
int returnInt = getValue() + b.getValue() + c.getValue();
Digit carry = new Digit(0);
if (returnInt == 2) {
carry = new Digit(1);
setValue(0);
} else if (returnInt == 1) {
carry = new Digit(0);
setValue(1);
} else if (returnInt == 0) {
carry = new Digit(0);
setValue(0);
} else if (returnInt == 3) {
carry = new Digit(1);
setValue(1);
}
return carry;
}
}
Es ist nicht unbedingt ist eine schlechte Sache, eine Digit-Klasse zu haben, um die 1s und 0s zu erzwingen, aber eine Add-Methode für die Digit-Klasse zu haben, macht keinen großen Sinn, da man nicht wirklich mit dem Übertrags-Bit umgehen kann. Ich würde mich darauf konzentrieren, nur auf der DNumber-Ebene zu addieren und das 0. Element zu machen, das 0 Bit wird wahrscheinlich die Dinge einfacher machen. – JimW