[Java] Somma di tutte le combinazioni

Messaggioda klodette89 » 13/10/2019, 21:10

Salve a tutti! Ho bisogno di un aiuto. Lo so che a molti di voi sembrerá facile ma non riesco a venirne a capo.
Mi é stato assegnato un esercizio nel quale ho una classe ("Processor") java. Mi viene chiesto di creare un progetto con questa classe che fa l´addizione di 2 numeri e contiene i metodi di addizione di 2 Byte, 2 Short, int e long. Devo testare questi metodi con tutte le possibili combinazioni byte-byte, short-short ecc (con un ciclo annidato). Come devo scrivere questa classe?
Chiedo umilmente aiuto ;-(

CODICE:

package processing;

public class Processor {

public static class Bits{

private static final int BYTE_SIZE = 8; // bits
private boolean[] bits;

private Bits() {}

private Bits(byte n) {
bits = new boolean[Byte.BYTES * BYTE_SIZE];
byte mask = 1;
for(int i = 0; i < bits.length; i++, mask = (byte) (mask << 1))
bits[i] = (n & mask) != 0;
}

private Bits(short n) {
bits = new boolean[Short.BYTES * BYTE_SIZE];
short mask = 1;
for(int i = 0; i < bits.length; i++, mask = (short) (mask << 1))
bits[i] = (n & mask) != 0;
}

private Bits(int n) {
bits = new boolean[Integer.BYTES * BYTE_SIZE];
int mask = 1;
for(int i = 0; i < bits.length; i++, mask = mask << 1)
bits[i] = (n & mask) != 0;
}

private Bits(long n) {
bits = new boolean[Long.BYTES * BYTE_SIZE];
long mask = 1;
for(int i = 0; i < bits.length; i++, mask = mask << 1)
bits[i] = (n & mask) != 0;
}

public byte toByte() {
if(bits.length != Byte.BYTES * BYTE_SIZE)
throw new NumberFormatException("Cannot convert to byte");

byte n = 0;
byte mask = 1;
for(int i = 0; i < bits.length; i++, mask = (byte) (mask << 1))
if(bits[i]) n = (byte) (n | mask);
return n;
}

public short toShort() {
if(bits.length != Short.BYTES * BYTE_SIZE)
throw new NumberFormatException("Cannot convert to short");

short n = 0;
short mask = 1;
for(int i = 0; i < bits.length; i++, mask = (short) (mask << 1))
if(bits[i]) n = (short) (n | mask);
return n;
}

public int toInt() {
if(bits.length != Integer.BYTES * BYTE_SIZE)
throw new NumberFormatException("Cannot convert to int");

int n = 0;
int mask = 1;
for(int i = 0; i < bits.length; i++, mask = mask << 1)
if(bits[i]) n = n | mask;
return n;
}

public long toLong() {
if(bits.length != Long.BYTES * BYTE_SIZE)
throw new NumberFormatException("Cannot convert to int");

long n = 0;
long mask = 1;
for(int i = 0; i < bits.length; i++, mask = mask << 1)
if(bits[i]) n = n | mask;
return n;
}

public int bytes() {
return bits.length / BYTE_SIZE;
}

private Bits zeroBits() {
Bits b = new Bits();
b.bits = new boolean[this.bits.length];
return b;
}

public Bits add(Bits that) {
if(this.bits.length != that.bits.length)
throw new NumberFormatException("Only equal byte-length allowed");
boolean[] a = this.bits;
boolean[] b = that.bits;
Bits result = this.zeroBits();
boolean[] r = result.bits; // Result

boolean c = false; // Carry

for(int i = 0; i < bits.length; i++) {
r[i] = a[i] ^ b[i] ^ c;
c = (a[i] && b[i]) || (a[i] && c) || (b[i] && c);
}
return result;
}

public String toString() {
StringBuilder sb = new StringBuilder();
for(int i = bits.length - 1; i >= 0; i--) {
if((i + 1) % 8 == 0) sb.append(' ');
if((i + 1) % 4 == 0) sb.append(' ');
if(bits[i])
sb.append('1');
else
sb.append('0');
}
return sb.toString().trim();
}

}

public Bits from(byte n) {
return new Bits(n);
}

public Bits from(short n) {
return new Bits(n);
}

public Bits from(int n) {
return new Bits(n);
}

public Bits from(long n) {
return new Bits(n);
}

public byte add(byte a, byte b) {
Bits as = this.from(a);
Bits bs = this.from(b);
Bits cs = as.add(bs);
return cs.toByte();
}

public short add(short a, short b) {
Bits as = this.from(a);
Bits bs = this.from(b);
Bits cs = as.add(bs);
return cs.toShort();
}

public int add(int a, int b) {
Bits as = this.from(a);
Bits bs = this.from(b);
Bits cs = as.add(bs);
return cs.toInt();
}

public long add(long a, long b) {
Bits as = this.from(a);
Bits bs = this.from(b);
Bits cs = as.add(bs);
return cs.toLong();
}
}
klodette89
New Member
New Member
 
Messaggio: 49 di 98
Iscritto il: 20/11/2014, 15:32

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite