Forum / Grundlagen des Programmierens / 1. Hausübung

1. Hausübung

Ok, ich habe eine relativ einfache Frage zur Aufgabe 1.3. Man soll dort mit Hilfe von Schleifen ein rechteckmuster erzugen. Mein Programm hat aber einen kleinen Fehler.

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Geben Sie bitte ein Zeichen ein:");
        String str = sc.nextLine();
        System.out.println("Geben Sie die Anzahl der Spalten ein:");
        int i = sc.nextInt();
        System.out.println("Geben Sie die Anzahl der Zeilen ein:");
        int n = sc.nextInt();
      while (i > 0) {
      while (n > 0) {System.out.print(str); System.out.println(str);
      
      i--;n--;
                  }
\n~~~

Das ist mein aktueller Programmcode den ich verwende. Habe das Programm folgendermasen gerunt:
Geben Sie bitte ein Zeichen ein:
x
Geben Sie die Anzahl der Spalten ein:
5
Geben Sie die Anzahl der Zeilen ein:
7
xx
xx
xx
xx
xx
xx
xx

wo liegt hier mein Fehler im Code? so kompliziert is das gar neda ber mir fällt keine lösung grad ein bin für jede HIlfe dankbar
Daniel ±0

Ich hab das Programm schnell herunter geschrieben. Es ist nicht die beste Lösung, aber es funktioniert!

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Geben Sie bitte ein Zeichen ein:");
String str = sc.nextLine();
System.out.println("Geben Sie die Anzahl der Spalten ein:");
int n = sc.nextInt();
System.out.println("Geben Sie die Anzahl der Zeilen ein:");
int i = sc.nextInt();
int help=n;

while (i > 0) 
{
    while (n > 0) 
    {
        System.out.print(str+" "); 
        n--;
    }
    System.out.println(str);
    i--;
    n=help;
}
}
\n~~~

Ich hoffe es stimmt!!
Georg ±0

Edit: ma zählen sollt ma können, programm versteh ich funktioniert auch aber es hat einen fehler^^ und zwar schreibst du pro zeile ein zeihen mehr als du haben solltest, habs behoben indem ich der schleife gesagt habe das n-1 > 0 sein muss jetzt funzt einwandfrei danke für die hilfe

Kevin ±0

Ja das mit dem einen Zeichen mehr, ist meiner Meinung nach ein Schönheitsfehler in deiner Programmierung, weil du ihm nämlich 2x das str ausgeben lässt. Du kannst ihm auch nur einen Zeilenumbruch machen lassen in dem du ihm in System.out.print("\n"); ausgeben lässt.

Georg ±0

Geb Ketschi irgendwo recht :D alternativ kann man auch System.out.println("") ist aber geschmacksache nur verzichten kann man leider nicht darauf :D

Daniel ±0

Ich hab das Programm in 5 Minuten herunter geschrieben und deshalb sind noch einige Schönheitsfehler dabei. Ihr habt natürlich recht...!

Vanessa ±0

Ich habe ein Problem bei Beispiel eins, und zwar beim Rauslesen aus der Eingabe die der User in der Konsole machen soll. Ich finde keinen Fehler in meinem Quelltext, aber bei der if bedingung nimmt java immer den wert i=0... Liegt es an der Formulierung der if-Bedingung mit dem String?

public class Aufgabe1_1026883_1 {
  public static void main(String[] args) { 
      System.out.println("Hello! Please choose your language");
      System.out.println("Deutsch=D");
      System.out.println("Englisch=GB");
      System.out.println("Russisch=RU");
      Scanner sc = new Scanner(System.in);
           String sprache = sc.nextLine();
           int i;
 if (sprache == "D" )i=1; 
   else if (sprache == "GB") i=2; 
   else if (sprache == "RU") i=3; 
   else i=0 ; 
 System.out.println(i);
 System.out.println(sprache);
 switch (i) {
     case 1: { System.out.println("Hallo Welt!");
                break; }
     case 2:  {System.out.println("Hello World!");
                break;}
     case 3: {System.out.println("Privjet Mir!");
                break;}
     default: {System.out.println("no correct enter");}
     }
     }
 }
\n~~~

Hoffe jemand kann mir weiterhelfen :/
Georg ±0

huh ganz shön komplizierter aufbau für die erste übung^^ der fehler ist relativ einfach und zwar liegt der daran das java den string nicht lesen kann, also sprache == "D" versteh java nicht das du willst das wenn du D drückst er was bestimmtes tun soll. dafür bräuchtest du ne .equals vergleich damit der das versteht. abkürzen kannste das ganze eigentlich auch indem du im switch case direkt die sprache tippst also sagst case "D": {...}; erfordert aber jdk7 umstellung. es gibt wohl noch ne möglichkeit das direkt mit nem char befehl zu machen dann muss man ned updaten aber keine ahnun wie der aussieht.

p.s. wenn du am anfang for jeder sprahe ein \n einbaust musst ned immer System.out.println shreiben, da \n einem zeilenumbruch entsteht sieht im code so aus: System.out.println("Servus \n das is ne neue Zeile")

Nicolas ±0

Hi hab das erste beispiel grad probiert und ich weis jetzt nicht recht warum er mir es als falsch anzeigt. kann mir einer das problem sagen?

danke

Georg ±0

du musst statt Case D Case 'D' schreiben außerdem kannste dir oben die char Sprache,E,L,D; sparen wenn du vor deinem Scanner befehl das char schreibst, so das dann dasteht: char Sprache = input.next()charAt(0); hauptsächlich liegt das problem aber darin das du die buchstaben bei den cases ned mit ' umgeben hast so erkennt er das als variabeln an und nicht als chars

Nicolas ±0

ahh ok^^alles klar danke dir

Michael ±0

kann mir wer sagen was es fürn command gibt um ein programm -nicht- direkt zu schliessen? also nachdem es durchgerannt is mein ich. ums zu beenden gibts ja System.exit(0), aber das gegenstück dazu? oder was womit ich wieder an den start zurückspringen kann wär vlt besser. (2.tes beispiel die If schleife bin ich grad am überlegen - und ich hab 0 programmier vorkenntnisse) wär klasse wenn ihr mir was einfaches zeigen könnts, damit ich selber bissl rumbasteln kann (und keinen fertigen code) :)

Georg ±0

es gibt keinen echten gegenbefehl dazu, so wie ichs verstanden habe willst du erstmal das es endlos weiterläuft immer wieder von vorne oder? dazu würde ich persönlich grundsätzlih mit schleifen arbeitn also mit while, do-while, for. das ganze kann man auh in einer if schleife einbauen, indem man z.b. in der if schleife einen zustand definiert der erfüllt sein muss und dann in der if schleife eine methode aufruft, die sich selbst ist. der typ währe sozusagen so in die richtung: methode 1 läuft ab, vor ENDE der methode die if schleife die so aussieht: if ("hier steht die von dir gewählte bedingung) { aufruf von methode1} so in die richtung gehen, hoffe das reiht dir, weil genauer erklären kann man eigentlich nur wenn man dir wirklich einen quellcode schickt also das beispiel direkt löst^^

Maximilian ±0

Hi hab das erste beispiel grad probiert und ich weis jetzt nicht recht warum er mir es als falsch anzeigt. kann mir einer das problem sagen?

danke

Frage:

Fehlt hier bei der "case" Unterscheidung nicht auch noch die "break" Anweisung?

Georg ±0

also bei mir steht da hinter jedem case ein break weiß ned wo dein problem ist :D

Maximilian ±0

WIe ich dass nur wieder Übsersehen hab :S

Ich glaub das WE war doch zu lang^^; Sorry !

Sorry, die Kommentarfunktion ist geschlossen.