Russische Bauernmultiplikation

alexander1739

Neues Mitglied
Hallo zusammen,
ich muss für die Uni ein Programm schreiben (Russische Bauernmultiplikation). An sich klappt alles, ich weiß jedoch nicht, wie ich die einstelligen Zahlen auf der linken Seite eins nach rechts verschiebe (ohne dass die Zahlen auf der rechten Seite ebenfalls um 1 verschoben werden) und wie ich die Anzahl der "----" und "====" so variiere, dass es mit der länge vom Ergebnis identisch ist. (Siehe Anhang)
Danke für jede Hilfe und hier ist mein Code =)

public class Bauernmultiplikation {
public static void main(String[] args) {

int num1 = Integer.parseInt(args[0]);
int num2 = Integer.parseInt(args[1]);

printBoard(num1,num2);
System.out.println("=====");
System.out.println(" "+ multipliziere(num1,num2));
}

private static void printBoard(int num1, int num2) {
System.out.println(String.valueOf(num1) + " * " + String.valueOf(num2));
System.out.println("-----");
while(num1>=1) {

if(num1 % 2 == 0)
System.out.println(Integer.toString(num1) + " " + Integer.toString(num2) + " X");
else
System.out.println(Integer.toString(num1) + " " + Integer.toString(num2));
num1/=2;
num2*=2;
}

}

public static int multipliziere(int x, int y){

if(x==1)
return y;

if(x%2!=0)
return y + multipliziere(x/2, y*2);
else
return multipliziere(x/2, y*2);

}

}
 

Anhänge

  • BMP.PNG
    BMP.PNG
    4,3 KB · Aufrufe: 3
  • BMP2.PNG
    BMP2.PNG
    2,9 KB · Aufrufe: 3

MarvinsDepression

Bekanntes Mitglied
wenn du nur eine Printanweisung benötigst (also keine String speichern willst) benutze printf
System.out.printf("%6d %6d %s \n", num1, num2, (num1 % 2 == 0 ? "X" : ""));
%6d bedeuted: dezimalzahl der (maximalen) Länge 6 rechtsbündig <- hier wird dann num1 und num2 eingefügt (1. + 2. Parameter)
%s ist der Platzhalter für einen String <- hier wird dann das 'X' oder ein blank eingefügt (der dritte Parameter)
 

White_Fox

Top Contributor
Schreib dir eine Methode, die ein Integer als auf Länge normierten String zurückliefert. Sowas ungefähr:
Java:
public class Bauernmultiplikation {
    enum TextAlignment{
        LEFT, RIGHT
    }
    
    String turnAIntToString(int num, int length, TextAlignment align){
        String numString = String.valueOf(num);
        String spaces = "";
        
        for(int i = 0; i++; i <= length - numString.legth){
            spaces = spaces + " ";
        }
        
        switch(align){
            case LEFT:
                return numString + spaces;
            case RIGHT:
                return spaces + numString;
        }
    }
}

Und gibt immer etwas mehr Länge an als du wahrscheinlich brauchen wirst.

Was auch ginge: Du machst erst die ganzen Berechnungen, speicherst irgendwo was in den Zeilen stehen sollte (interne Klasse oder sowas) und gibst erst aus wenn du fertig gerechnet hast, dann weißt du wie breit das maximal wird.
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben