Rechnen in Arrays

tropifrutti

Mitglied
Hallo,

ich hab gedacht ich haette eine simple Programmieraufgabe zu loesen. Es geht an sich um einfaches arithmetisches Rechnen und Inkrementieren mit Java. Allerdings soll man die Ergebnisse in Feldern ausgeben. Ich hatte versucht mit einer for-Schleife einen Integer-Wert hochzaehlen zu lassen und wollte diesen dann in einem Feld ausgeben. Allerdings hab ich ein Problem damit den Integerwert in ein Byte-Array umzuwandeln (bzw. weiss nicht ob dass noetig ist oder eleganter geht). Kann mit jemand helfen? Waere super!

Hier eine der Methoden wo es ums Inkrementieren geht:
Java:
  public static byte[] inc(byte[] A) {
    ...
  }
Das war gegeben und hier mein Ansatz:
Java:
  public static byte[] inc(byte[] A) {
	for (int a = 0; a < 10 ; a++)
		System.out.println(a);
		// hier hatte ich an die Methode toCharArray gedacht... aber ich glaub damit komm ich nicht weit.
	return A; 
  }

Danke schonmal!
 
Zuletzt bearbeitet:
Benutze für Java-Code bitte die Auszeichung [Java] und nicht [Duke]. So kann das ja kein Mensch lesen. Und zu deiner Frage, ich glaub ich hab Dein Problem noch nicht verstanden. Kannst Du vielleicht die Aufgabe etwas näher beschreiben?
 
Danke schonmal für das Ändern der Tags. Aber ich hab immer noch nicht verstanden, was inkrementiert werden soll und was dann als Array/Felder zurück gegeben werden soll. Willst Du jedes einzelne Feld in dem byte-Array inkrementieren, das Du als Parameter übergibst und das dann zurück geben?
 
ok, also ich moechte einen Algorithmus schreiben, der in der Methode inc() A hochzaehlt.
Java:
  public static byte[] inc(byte[] A)
  {
    ...
  }
Also immer A+1 und den Wert ausgeben. Alle Integer sollen am Ende in den byte Arrays als Bits gespeichert werden. Die Methode inc(A) soll also ein Array von Bits zurueckgeben das durch A+1 berechnet wird.
Ich hoffe es ist diesmal verstaendlicher beschrieben!
 
Aber das geht doch nicht. A ist in Deiner Methode ein Array (das mehrere Werte enthält) und kein einzelner Wert. Zu einem Array kann man nicht 1 addieren. Man kann aber zu jedem einzelnen Element des Arrays 1 addieren oder einen Array zurück geben, der ein Element mehr enthält als der übergebene (wobei dann die Frage ist, welchen Wert dieses Element enthalten soll). Und müssen es wirklich bytes sein? Die gehen nämlich nur bis 127. Würden ints Dir nicht mehr nützen?
 
Zuletzt bearbeitet von einem Moderator:
oweia, dann hab ich die Aufgabenstellung voellig missverstanden. also dann muesste ich ein Variable in dem Byte-Array hochzaehlen lassen und die dann als Byte Interpreation ausgeben lassen. Kann man das mit einer Schleife machen und dann den Integer-Wert in einen Byte-Wert umwandeln? Oder wie gehts das?
Ist es dann mit diesem Code getan?
Java:
  public static byte[] inc(byte[] A) {
	for (int a = 0; a < 10 ; a++)
		System.out.println(a);
	return A;
 
Zuletzt bearbeitet:
Tut mir leid, ich blick's immer noch nicht, was die Aufgabenstellung ist. Ich tipp jetzt einfach mal ins Blaue in der Hoffnung, dass es das ist, was Du willst. Der folgende Code nimmt einen Startwert und eine gewünschte Länge und liefert einen Array zurück, dessen erstes Element beim Startwert losgeht und dann soviele Elemente enthält, wie von Länge angegeben. Wobei jedes Element eins höher ist als das Vorhergehende:

Java:
public final int[] buildIntArray(final int startWert, final int laenge) {
  final int[] result = new int[laenge];
  for (int i = 0; i< laenge; i++) {
    result[i] = startWert + i;
  }
  return result;
}
 
Zuletzt bearbeitet von einem Moderator:
Ich denke ich hab auch ein Problem mit dem Verstaendnis der Aufgabenstellung. Tut mir leid wenn ich es nicht schaffe mich ordentlich auszudruecken. Aber ich denke die letzte Antwort muesste die passende sein. Ich probiers einfach gleich nochmal aus!

Ok, also der Rahmen der Methode war so vorgegeben und ich soll lediglich in der Methode den Algorithmus zum Inkrementieren hinzufuegen. Das heisst mein Rueckgabewert ist ein Array. Das heisst vielleicht war ich mit meiner Integer-Idee von Anfang an auf dem Holzweg.
Java:
  // inc(A) returns an array of bits representing A+1.

  public static byte[] inc(byte[] A)
  {...}
 
Zuletzt bearbeitet:
Ich denke ich hab auch ein Problem mit dem Verstaendnis der Aufgabenstellung.
Leute... Worte (geschrieben oder ausgesprochen) dienen ja nicht dazu, papier / pixel zu verschwenden oder Luft zu erschüttern, sondern dazu Informationen zu übertragen. Aber aus irgendeinem Grund kommt bei vielen keine Information an ???:L Wenn man eine Aufgabenstellung liest, dann ist es kein Buchstabensalat, den man mit zwei dutzend Rechenregeln mechanisch umwurschten soll, sondern eine Idee. Und solange die Idee des Aufgabenstellers nicht angekommen ist, bringt es nicht, auf gut Glück irgendwelchen Buchstabensalat zu coden. Es ist wirklich so: es gibt [auch an Unis!!] so viele Leute, die Aufgabenstellung nur als Buchstabensalat wahrnehmen, und dann wieder Buchstabensalat zurückliefern, das ist unglaublich... :noe:

Selbst ohne jeglichen Kontext, ohne irgendwelche Kenntnisse über die Vorlesung leuchtet aus diesem ganzen Salat immer noch durch, was der Aufgabensteller gemeint hat: es geht darum, dass man einen Integer in einzelne Bits zerlegt (und in einem byte-array abspeichert), und dann versucht, diesen manuell, bit für bit zu inkrementieren.

Also sowas:
Java:
public class IntegerRepresentation {

	public static void increment(byte[] a){
		byte carry = 1;
		for (int i = 0; i < a.length; i++){
			byte b = a[i];
			a[i] ^= carry;
			carry &= b;
		}
	}
	
	public static String toBinaryString(byte[] a){
		String res = "";
		for (int i = 0; i < a.length; i++){
			res = (a[i] == 0 ? "0" : "1") + res;
		}
		return res;
	}
	
	public static void main(String[] args){
		byte[] a = new byte[8];
		for(int i = 0; i <= 32; i++){
			increment(a);
			System.out.println(toBinaryString(a));
		}
	}
}

Aber das geht doch nicht. A ist in Deiner Methode ein Array (das mehrere Werte enthält) und kein einzelner Wert.
Doch, in dieser Aufgabe anscheinend schon. byte[] stellt die einzelnen bits dar. Könnte genausogut boolean[] sein...


Vielleicht sollst du ja den wert jedes Eintrags im Array um einen byte erhöhen?
Nö.
 
Zuletzt bearbeitet:
Selbst ohne jeglichen Kontext, ohne irgendwelche Kenntnisse über die Vorlesung leuchtet aus diesem ganzen Salat immer noch durch, was der Aufgabensteller gemeint hat: es geht darum, dass man einen Integer in einzelne Bits zerlegt (und in einem byte-array abspeichert), und dann versucht, diesen manuell, bit für bit zu inkrementieren.
Darauf wär ich nie gekommen! Respekt (natürlich nur, wenn's stimmt 😉 ).

Und solange die Idee des Aufgabenstellers nicht angekommen ist, bringt es nicht, auf gut Glück irgendwelchen Buchstabensalat zu coden.
Abgesehen davon kann es schon helfen, ins Blaue hinein zu coden. Wenn damit bestimmte Verfahrensweisen (in diesem Fall das iterieren durch einen Array) für den Fragesteller klar werden. Auch wenn der Code ansich natürlich im Sinne der Aufgabenstellung nichts weiter Sinnvolles tut.
 
Also erstmal vielen Dank euch beiden, dass ihr euch damit auseinander gesetzt habt! Tut mir noch einmal leid, dass nich das ruebergekommen ist was ich machen wollte! Die Antwort von 0x7F800000 liefert das Ergebnis, das ich wollte. Jetzt kann ich mich auch an die anderen Rechenarten machen! Super!
 
Zuletzt bearbeitet:

Zurück
Oben