Erste Schritte Muster ausgeben in der Konsole - großes V

Carly

Neues Mitglied
Einen schönen guten Abend,

wir haben folgende Übung in der Schule bekommen und ich komme an einem bestimmten Punkt nicht weiter. Über den Wink in die richtige Richtung würde ich mich sehr freuen, damit ich die Aufgabe dann selbständig lösen kann. Also los geht's:

Es ist ein überdimensionales V in der Konsole auszugeben, bestehend aus V's und Unterstrichen. Der Benutzer gibt einen Wert ein (positive, ungerade, ganze Zahl), der die Größe des V und die Anzahl der V's festlegt. Die Anzahl der dazwischen bzw. links und rechts liegenden Unterstrichen soll aus der Benutzereingabe berechnet werden.

[CODE title="Beispiel für Eingabe 5"]V___V
_V_V_
__V__[/CODE]

3 Zeilen, 5 Spalten, 5 Zeichen pro Reihe und insgesamt 5 V's

[CODE title="Beispiel für 7"]V_____V
_V___V_
__V_V__
___V___[/CODE]

4 Zeilen, 7 Spalten, 7 Zeichen pro Reihe und insgesamt 7 V's

Mein Code bisher:

Java:
import java.util.*;

public class GrossesV{

public static void main(String [] args){

  Scanner sc = new Scanner(System.in);
  System.out.println("Wir geben ein grosses V in der Konsole aus, bestehend aus V's und _ Unterstrichen");
  System.out.println("Geben Sie eine positive ungerade ganze Zahl ein, welche die Anzahl der V's bestimmt:");

  int eingabeZahl = sc.nextInt();
  System.out.println("Ihre Benutzereingabe ist: " + eingabeZahl);

  int i;                                                                         //Zeilen
  int j;                                                                          //Spalten

  if(eingabeZahl % 2 != 0){

  for(i = 0; i < eingabeZahl - 2; i++){                                            //Erhöhung der Anzahl an Zeilen bis Benutzereingabe - 2 erreicht ist

    for(j = 1; j <= eingabeZahl; j++){                                            //Erhöhung der Anzahl an Spalten bis Benutzereingabe erreicht ist

      if(j == 1 | j == eingabeZahl) {                                                //Fügt ein V an erste und letzte Stelle
      System.out.print("V");
    } else{
      System.out.print("_");
      }
    }
    System.out.println();                                                        
  }
} else{
  System.out.println("Geben Sie bitte eine ungerade Zahl ein!");                //Fehlermeldung bei Eingabe einer geraden Zahl.
}

 }
}

Es sieht jetzt so aus:

Code:
V___V
V___V
V___V

Damit kann ich schon die erste Zeile erzeugen, aber eben immer wieder die erste Zeile. Jede weitere Zeile soll ja anders werden. Ich habe Probleme damit, eine Regelmäßigkeit zu erkennen bzw. zu formulieren. Ich ertappe mich immer wieder dabei, dass ich die weiteren Zeilen einzeln ansprechen möchte (i==1, i==2, usw.), aber das wird mühsam, wenn jemand z.B. 33 eingibt 😀 Ich bin wahrscheinlich Betriebsblind, beschäftige mich schon das ganze Wochenende mit dem Thema und bräuchte mal etwas Input. Vielen Dank!
 
Ich habe Probleme damit, eine Regelmäßigkeit zu erkennen bzw. zu formulieren. Ich ertappe mich immer wieder dabei, dass ich die weiteren Zeilen einzeln ansprechen möchte (i==1, i==2, usw.), aber das wird mühsam, wenn jemand z.B. 33 eingibt 😀
Zähl mal die Anzahl der Unterstriche, die vor dem ersten bzw. nach dem zweiten "V" in jeder Zeile auftauchen. Fällt Dir was auf?
 
Die Höhe des auszugebenden V in Zeilen kannst Du aus der eingegebenen Zahl per Berechnung ermitteln.

Beachte dabei, dass in Java bei der Division ganzer (int) Zahlen der gebrochene Teil abgeschnitten wird, also bei positiven Zahlen abgerundet wird.

Die Anzahl der äusseren Underscores (links und rechts) steigt von 0 auf.

Die Anzahl der inneren Underscores (mitte) steigt zu 0 ab.

Ich finde übrigens, dass Java für Schüler zu viel technisches Ritual verlangt, zum Beispiel die statische main-Methode, die schwer verständlicherweise in einer Klasse stehen muss, mit welcher sie nichts zu tun hat.
 
Ich finde übrigens, dass Java für Schüler zu viel technisches Ritual verlangt
Da muss ich dir (teilwieise) zustimmen. Ich habe selber einmal Schulungen in Java gegeben und die erste Übung war schwer zu erklären:

Lösung der ersten Übung:
Java:
public class HelloWorld {
  public static void main(String[] args) {
    System.out.println("Hello, world!");
  }
}

Hier muss ich erklären:
- Der Code muss in "HelloWorld.java"gespeichert werden
- Er muss kompiliert werden mit ...
- Er muss ausgeführt werden mit ...
- "public" lernen wir später
- "class" lernen wir später
- "static" lernen wir später
- "void" lernen wir später
- "main" lernen wir später
- "String" lernen wir später
- "args" lernen wir später
- "System" lernen wir später
- "..........." lernen wir später ...

Für Schüler*innen mag es bessere Programmiersprachen geben, um sich darin überheaupt einzudenken,
aber für "echte" Programmiersprachen, wird das Dilemma wohl weiter bestehen.
 
Zuletzt bearbeitet:
zu viel technisches Ritual
Zusätzlich: bei der "Konkurrenz" unter .NET 5 i.V. mit C# 9 kann man weniger Rituale abhalten um ein Programm aufzusetzen, siehe https://www.thomasclaudiushuber.com...s-or-should-i-say-hey-wheres-the-main-method/
Vorteile: weniger Code bei gleichem Ergebnis und man muss sich (spez. als Anfänger) weniger in die Materie einlesen.
Nachteile: man erfährt wenig(er) über die Hintergründe und Vor-/Nachteile diesen oder jenen (neueren) Ansatzes.
 
Nachteile: man erfährt wenig(er) über die Hintergründe und Vor-/Nachteile diesen oder jenen (neueren) Ansatzes.

Ich glaube, dieser Nachteil kommt meist nicht zum Tragen.
Viele Schüler programmieren in ihrem Leben nie wieder.
Die werden nur abgeschreckt.
In die Tiefe der Materie kann man auch bei weiterer Beschäftigung später einsteigen.
 

Zurück
Oben