# Zeilenlänge so bestimmen, dass die verfügbaren Lücken in Leerzeichen ausgegeben werden



## liluu (9. Dez 2018)

Hallo,
ich schreibe hier zum ersten Mal, da ich so verzweifelt bin und keine andere Möglichkeit mehr habe.
Ich habe eine Aufgabe die ich bis Dienstag fertig machen muss und ich befasse mich schon seit Wochen damit, komme aber zu keiner richtigen Lösung.
Hier die Aufgabenstellung:
Das Ziel der Aufgabe ist es, einen Text, dessen einzelne Wörter als String-Array gegeben sind, in Blocksatz auszugeben. Die beschriebenen Funktionen sollen sich in einer Klasse Blocksatz befinden.
 a) Programmieren Sie eine Funktion
static void ausgabeZeile (String [] woerter , int breite)
die die Wörter im Array woerter als eine Zeile der Breite breite nach System.out ausgibt, getrennt durch ein oder mehrere Leerzeichen als Wortzwischenraum. ausgabeZeile ändert das Array woerter dabei nicht.
Dabei gilt: • woerter enthält keine Null-Referenzen.
• woerter enthält mindestens zwei Wörter.
• Zu Beginn oder am Ende der Ausgabe sollen keine Leerzeichen sein.
• Um auf die erforderliche Breite zu kommen, kann es nötig sein, die Wortzwischenräume zu vergrößern. Die Länge der Wortzwischenräume soll sich untereinander um höchstens eins unterscheiden. Längere Zwischenräume dürfen nicht auf kürzere folgen.
• Die Wörter sind so gewählt, dass die Ausgabe mit der geforderten Breite und mindestens einem Leerzeichen zwischen zwei Wörtern möglich ist (muss nicht überprüft werden). Beispiele:
Array woerter                                           Ausgabe von ausgabeZeile(woerter, 9)
 {"abc", "def"}                                                        abc def
{"ab", "cd", "ef"}                                                    ab cd ef
{"ab", "c", "d", "e"}                                                 ab c d e

Ich weiß, dass ich Modulo brauche und habe auch bestimmte Ansätze komme aber leider nie zur richtigen Lösung, wäre nett wenn jemand mir weiterhelfen kann.
ich meine damit wie würdet ihr da ran gehen, was hättet ihr für ein Datentyp gewählt und würdet ihr auch mit modulo arbeiten?


----------



## Javinner (9. Dez 2018)

@liluu 
Und was hast du bis jetzt alles versucht? Wie sieht dein Code bis jetzt aus?


----------



## liluu (9. Dez 2018)

@Javinner 

public class Blocksatz {

    public static void ausgabeZeile(String[] woerter, int breite) {
        String leerzeichen = " ";
        int zeilenlaenge = 9;
        int zeichenanzahl = 6;
        int anzahlLuecken;
        int anzahlProLuecke;
        int verfuegbareLeerzeichen = zeilenlaenge - zeichenanzahl;

        for (int i = 0; i < breite; i++) {
            System.out.println(woerter);
        }
        for (int i = 0; i <= woerter.length; i++){
            leerzeichen += i;
        }
            if (zeilenlaenge - zeichenanzahl == verfuegbareLeerzeichen && verfuegbareLeerzeichen / 1 == 3) {
                System.out.println(leerzeichen);
            } else {
                System.out.println(" ");
            }


        if (zeilenlaenge - zeichenanzahl == 3 && verfuegbareLeerzeichen / 2 == 1) {

        }
        int zeichenanzahl1 = 3;
        if (zeilenlaenge - zeichenanzahl1 == 5  && verfuegbareLeerzeichen / 3 == 1) {

        }

        if (verfuegbareLeerzeichen % 3 == 2){

        }
    }
    public static void main(String[] args) {
        String[] woerter = { "abc", "def" };
        System.out.println("abc" +"def");
        String[] woerter1 = { "ab", "cd", "ef" };
        System.out.println("ab" + "cd" + "ef");
        String[] woerter2 = { "ab", "c", "d", "e" };
        System.out.println("ab" + "c" + "d" + "e");
  }
}


----------



## Javinner (9. Dez 2018)

Bitte benutze nächstes Mal Code-Tags [code=Java]Dein Code[/code]

Wörter enthält keine Null-Referenzen.
Wörter enthält mindestens zwei Wörter.
Zu Beginn oder am Ende der Ausgabe sollen keine Leerzeichen sein.
*Um auf die erforderliche Breite zu kommen, kann es nötig sein, die Wortzwischenräume zu vergrößern*. *Die Länge der Wortzwischenräume soll sich untereinander um höchstens eins unterscheiden. Längere Zwischenräume dürfen nicht auf kürzere folgen*.
Die Wörter sind so gewählt, dass die Ausgabe mit der geforderten Breite und mindestens einem Leerzeichen zwischen zwei Wörtern möglich ist (muss nicht überprüft werden).

Ich werfe mal eine Idee in den Raum:

```
public class Blocksatz
{

    public static void ausgabeZeile(String[] woerter, int breite)
    {
        //To do
    }

    public static void main(String[] args)
    {
        String[] woerter =
        {
            "abc", "def"
        };
        String[] woerter1 =
        {
            "ab", "cd", "ef"
        };
        String[] woerter2 =
        {
            "ab", "c", "d", "e"
        };

        rowOutput(woerter, 9);
        rowOutput(woerter1, 9);
        rowOutput(woerter2, 9);

    }

    public static void rowOutput(String[] array, int rowNumber)
    {
        int allLettersOnArray = getAllLettersOnArray(array);
        int allWordsOnArray = array.length;
        System.out.println(String.format(Locale.ENGLISH, "Letters: %d, Words: %d, Rownumber: %d", allLettersOnArray, allWordsOnArray, rowNumber));

    }

    private static int getAllLettersOnArray(String[] array)
    {
        int x = 0;
        for (String onArray : array)
        {
            x += onArray.length();
        }
        return x;
    }

}
/** Output */
Letters: 6, Words: 2, Rownumber: 9 //Here we are
Letters: 6, Words: 3, Rownumber: 9
Letters: 5, Words: 4, Rownumber: 9
```

Man hat zwei Wörter, welche jeweils drei Buchstaben lang sind und die Ausgabe soll mindestens neun Zeichen betragen. Da vorn und hinten kein Leerzeichen stehen darf (siehe Aufgabenstellung) und es nur zwei Wörter sind, muss unter der Beachtung der Regel "Die Länge der Wortzwischenräume soll sich untereinander um höchstens eins unterscheiden" der Zwischenraum mit Leerzeichen gefüllt werden. Hier genau drei, da nur ein Zwischenraum. Und so verfährst weiter, natürlich unter der Beachtung der Gegebenheiten der jeweiligen Arrays und Breiten.

Eine fertige Lösung werde ich nicht liefern, jedoch helfen, dir dorthin zu gelangen


----------

