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
Martin ±0

{Also.. hab bei Aufgabe 5 nen kleinen Fehler entdeckt ;) aber 210GPa = 210000 N/mm² =210E3 N/mm² und nicht 210E9 Sonst sind deine ergebnisse a bissl verschoben ;)}

edit: Ok.... hat sich erledigt... ist schon wer anderer draufkommen ;)

Anil ±0

Hallo ich habe das 1.beispiel probiert und bin mir nicht ganz sicher ob da alles stimmt .es gibt zwar keinen fehler aber es zeigt nicht die cases beim run :S

 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author anilshaggy50
 */
import java.util.Scanner;

public class HelloWorld {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
   // TODO code application logic here
    Scanner input = new Scanner(System.in);
        
        System.out.print("Guten Tag!");
        System.out.println("Wählen Sie bitte eine Sprache;");     
        System.out.println("Deutsch=D");
        System.out.println("Englisch=E");
        System.out.println("Türkisch=T");

  char Sprache = input.next().charAt(0);
  switch (Sprache) {
      case 'D':
          System.out.println("Hallo Welt");
          break;  
      case 'E':
          System.out.println("Hello World");
          break;
      case 'T':
          System.out.println("Merhaba Dünya");
          break;
      default: {System.out.println("no correct enter");}        
  }
    
    }

}
\n~~~


run:
Guten Tag!Wählen Sie bitte eine Sprache;
Deutsch=D
Englisch=E
Türkisch=T
Oguzhan ±0

ich hab auch eine Frage und zwar wenn ich diesen quellcode ausführe.. hängt das programm in einer endlosschleife.. egal ob ich J oder N drücke es fängt immer wieder von vorne an:S

import java.io.IOException;
import java.util.Scanner;

public class Bsp1_1125215_2 {
    private static String[] String;
    
    public static void main(String args[]) throws IOException {
        
     
        float groese; 
                      
        Scanner input = new Scanner(System.in);
        
        System.out.println("Geben Sie ihre Körpergröße in Meter ein");
        groese =input.nextFloat();
           
        float gewicht;
        
        System.out.println("Geben Sie ihr Gewicht in Kilogramm ein");
        gewicht=input.nextFloat();
        
        float bmi;
        bmi = gewicht /(groese*groese);
       
               
        System.out.println("Ihr BMI ist : " + bmi);
        restart();
      
    }

private static void restart() throws IOException {
    
    char i;
    boolean J;
    J = true;
    Scanner scanner = new Scanner(System.in);
    System.out.println("Erneute Rechnung Starten? \n (J)Ja \n (N)Nein");
    i=(char)System.in.read();


if(J){
    
    main(String arg[]);
}
else { 
    System.out.println("Danke und auf Wiedersehen");
  
   }
}
}
\n~~~
Wolfgang ±0

@ Anil Shaggy, gibst du Groß- oder Kleinbuchstaben ein? Die Eingabe ist Case-Sensitiv. So wie du die Case-Anweisung geschrieben hast, musst du Großbuchstaben eingeben.

@ 1125215, du musst glaub ich das (J) bei der If-Anweisung unter Hochkomma setzen: 'J'

Anil ±0

@ Wolfgang Maierhofer , aso das ist es ich habe nicht darauf geachtet jetzt passt danke dir ...

Oguzhan ±0

wenn ich das J in hochkomma setzt :D sagt er mir required boolean but found char.. ich weiß echt nicht weiter..

Georg ±0

also bin mir nicht ganz sicher was du genau da machst weil ich diese IO ding nicht kenne. aber im endeffekt ist das untern ein banaler fehler. im program passiert folgendes: boolean mit namen J wird erstellt und als true gesetzt. char i wird initialisiert und ein wert zugeordnet per scanner was passiert jetzt weiter im programm: if schleife wird aufgerufen mit folgenden werten: if boolean richtig führe die schleife erneut aus sonst nicht.

du hast aber keine falschsetzung. das J bei boolean ist kein buchstabe sondern der name, du hättest da auch isRunning oder blalbalba schreiben können das ergebnis is das gleiche du hast eine endlosschleife die du nicht beenden kannst weil du den boolean nie false setzt. und du auch keinen zusammenhang zu deiner eingabe hast.

kurz gesagt im aktuellen aufbau ist der boolean überflüssig. was du eigentlich willst is das der scanner die eingabe j erkennt und dann die methode abspeitl und das geht über den befehl 'j' == i . wenn man einen boolean verwenden will muss man das programm in eine do oder while schleife handeln und sagen schleife abspielen soange der boolean true ist, das würde dann in etwa so aussehen: if ('j' == i){ boolean blubb = true} else {blubb = false}. da du aber hier eine methode aufrufs tudn so die schleife erzeugst ist der boolean überflüssig ;)

kurz lösch eboolean ganz rau sund schreib bei der if schleife 'j'==i das sollte reichen

Oguzhan ±0

@fieba du bist mein held :):):) das hat geklappt ^^

Daniel ±0

hi! bin programmiereinsteiger!!

wollte fragen was der Befehl 'char' bedeutet ?!

Bang ±0

mit char erstellst du variablen mit dem datentyp charakter (zeichen). ich würde dir empfehlen zumindest die folien der VU durchzulesen. da kommen die befehle vor.

Patrick ±0

Habe ebenfalls eine Frage zu Beispiel 3:

Meine Eingabe:

        //Abfrage für Rahmenbedingungen
        System.out.println("Bitte geben sie ein ASCII-Zeichen ein.");
        symbol = scan.next().charAt(0);
        
        System.out.println("Bitte geben Sie die Anzahl der Zeilen ein.");
        rows = scan.nextInt();
        
        System.out.println("Bitte geben Sie die Anzahl der Spaten ein.");
        columns = scan.nextInt();
        
        //Lösung mittels while-Schleife
        while (i < rows) {     //Zeilen-Schleife
            j = 0;                  //Neuangang der Durchzählung pro Zeile
            
            while (j < columns) {   //Spalten-Schleie
                System.out.println(symbol);
                j++;         
            }
            
            System.out.println();
            i++;            
        }              //Ende while-Schleife
    }
}
\n~~~

Der Test ergibt:

Bitte geben sie ein ASCII-Zeichen ein.
E
Bitte geben Sie die Anzahl der Zeilen ein.
3
Bitte geben Sie die Anzahl der Spaten ein.
2
E
E

E
E

E
E

wo liegt mein Fehler?
Oguzhan ±0

Hallo ich hab eine frage wieso will der von mir unendlich viele eingaben haben .. ohne das der mir das ausgibt?

  Scanner sc = new Scanner(System.in);
    System.out.println("Bitte Zeichen eingeben: ");
    String zeichen = sc.nextLine(); 
    System.out.println("Bitte die Spaltenanzahl eingeben: ");
    int s = sc.nextInt();
    System.out.println("Bitte die Zeilenanzahl eingeben: ");
    int z = sc.nextInt();
    
int i=0, n=1;
     
    while(i<z){
        n=1;
         while(i<s){
             System.out.print(zeichen);
             n++;
         }
         System.out.println(zeichen);
         i++;
         }
    }
}
\n~~~

ich sehe meinen fehler nicht?
Edit: Ich hab meinen fehler gefunden:) steckt im detail und zwar gehört da statt i < s  , ein n < s :D logisch ^^ sonst habe ich eine unendlich lange zeile hahah :D


Edit2: eine Frage noch wie kann ich mein projekt in eine archivdatei umwandeln.. ich hab das gemacht was in der abgabgekonvention steht aber ich finde meinen dist ordner nicht:S
Clara ±0

Habe ebenfalls eine Frage zu Beispiel 3:

Meine Eingabe:

Der Test ergibt:

wo liegt mein Fehler?

bei den spalten darfst du kein println verwenden, sondern nur print, drum macht er dir die abstände

Clara ±0

kann ich bei Beispiel 3, die do-while Schleife auch so schreiben?:

do{
              System.out.println();
              n++;
              
              i=0;
              do{
                 System.out.print(Zeichen);
                 i++;
                 
              }
              while(i<Spalten);
          }
          while(n<Zeilen);
\n~~~

also zuerst über Zeilen und innerhalb von ihr über die Spalten? ... weil bei den ganzen hochgeladenen dateien is es andersrum, es funktioniert bei mir auch, nur kommt im Anfang warum auch immer ein Abstand (also bevor das muster beginnt) und der grüne text kommt dann gleich hinter der letzten Zeile vom muster nach, und nicht drunter ... aber theoretisch sollte das ja egal sein solang es funktioniert oder??
Michael ±0
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pkg0926990_1;

import java.util.Scanner;  //intressanterweise zeigt er mir hier und bei lang.Math nen 'gelben' Fehler an..
import java.lang.Math;
        
        
/**
 *
 * @author Mike
 */
public class Bsp5_0926990_1 
{
    public static void main(String args[])
    {
        
        Scanner eingabe_sc = new Scanner(System.in);
        System.out.println("Geben sie den gewünschten Körper an ");
        System.out.print("(Q)uadratisch , (K)reisförmig , (I)-Träger : ");
        char querschnitt = eingabe_sc.next().charAt(0);
        System.out.print("Geben sie die Breiten/Durchmesser an : ");
        float laenge = eingabe_sc.nextFloat();

        

        double traegheit;
        
        
        switch(querschnitt)
        {
            case 'q' : 
                traegheit = (Math.pow(laenge,4)/16);
                break;
                
                
            case 'k' :
                traegheit = (Math.pow(laenge,4)*3.14/4);
                break;
                
                
            case 'i' :
                traegheit = (Math.pow(laenge,4)*10/144);
                break;
               
        }
        

        System.out.println("Geben sie die einwirkende Kraft an : ");
        float kraft = eingabe_sc.nextFloat();
        System.out.println("Welchen Träger wollen sie berechnen");
        System.out.println("(B)eidseitig gelagert mit Kraft in der Mitte, oder \n(E)ingespannt mit Kraft am Ende");
        char einspannung = eingabe_sc.next().charAt(0);

        double biegung;
        double E = 210E9;
        switch(einspannung)
        {
            
            case 'b' :
                biegung = kraft*Math.pow(laenge,3)/(48*E*traegheit); //  hier und
                break;
                
            case 'e' :
                biegung = kraft*Math.pow(laenge,3)/(3*E*traegheit); // hier sagt er, dass traegheit ned initialisiert is, aber ich hab oben in der andren switch anweisung ja ne zahl dann zugewiesen und 
                                                                                         // auch als double deklariert ...
        
        
        }
        
        System.out.println("Die maximale Durchbiegung ihres Träger ist :" + biegung); //und infolge dessen, kann er hier +biegung auchned ausführen..
        
        
        
    
    
    }
    
  
}
\n~~~



Fehler sind mit // angemerkt .. wäre echt dankbar wenn mir da wer meine dummheiten aufzeigen könnte, weil ichs einfahc ned versteh was er von mir will :(
Sorry, die Kommentarfunktion ist geschlossen.