Zwischenspeichern von "Ausgaben" (?)

wulf

Grünschnabel
Tach allerseits,

hab jetz zum WS ein Infostudium begonnen, weil es hieß, dass Vorkenntnisse im Programmieren nicht nötig seien und v.a. weil ich viel Spaß an Mathe und generell Interesse an Informatik habe.
Allerdings merk ich momentan schon, dass ich einige Probleme im Programmieren habe..

Vielleicht könnt ihr mir ja bei einer konkreten Aufgaben helfen..

Aufgabenstellung:
Erstellen Sie ein Java-Programm, das für Schulnoten ihre Bedeutung ausgibt. In verschiedenen Ländern haben die
gleichen Noten unterschiedliche Bedeutungen. Betrachten Sie die Notensysteme in Deutschland, den Niederlanden und
Spanien (angegeben in der Datei Notensysteme.txt in Stud.IP).
Der Benutzer soll nun zunächst gefragt werden, in welchem Land ('D' für Deutschland, 'N' für die Niederlande oder 'S'
für Spanien) er die Schulnote erhalten hat, danach in welchem Fach (beliebige Zeichenkette) er die Schulnote erhalten
hat und zuletzt um welche Note es sich gehandelt hat. Diese drei Fragen sollen solange wiederholt werden, bis der
Benutzer anstatt eines Landes 'X' eingibt. Bei Eingabe von 'X' soll das Programm eine Zusammenfassung der Noten
des Benutzers ausgeben und anschließend beendet werden. Falls der Benutzer ungültige Daten eingibt, so soll das
Programm mit einer passenden Fehlermeldung und ohne weitere Ausgabe beendet werden.
Beispiel: Angenommen der Benutzer gibt ein:
Welches Land?> D
Welches Fach?> Programmierung 1
Welche Note?> 2
Welches Land?> D
Welches Fach?> Theoretische Informatik
Welche Note?> 1
Welches Land?> D
Welches Fach?> Eziente Algorithmen
Welche Note?> 2
Welches Land?> X
Dann lautet die Ausgabe am Ende des Programms:
Ihre Leistung in Programmierung 1 war gut.
Ihre Leistung in Theoretische Informatik war sehr gut.
Ihre Leistung in Effiziente Algorithmen war gut.
Hinweis:
 Zwei Strings s1 und s2 können auf Gleichheit getestet werden, indem Sie die Methode equals der Klasse String
wie folgt benutzen:
s1.equals(s2) ergibt als Ergebnis true, wenn s1 und s2 gleich sind, und sonst false.
 Die Ausgabe der Noten soll erst beim Beenden des Programms erfolgen, nicht schon während der Eingaben des
Benutzers.
a) Schreiben Sie eine Version des Programms, in der Sie mindestens ein switch-Konstrukt verwenden.




die konkreten Probleme liegen darin, dass ich die while-Schleife nicht so hinbekomme, dass die Eingabe nach dem "X" beendet wird, sowie dass ich keine Ahnung habe, wie ich es schaffe, dass die Ausgabe erst nach dem Ende der Eingabe kommt..

Bisher sieht mein Werk ( ^^ ) so aus:

Code:
import java.io.*;
 
public class notensysteme {


	public static void main(String[] args) throws IOException {
		
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		
		String L = null;
		String F = null;
		int note;
		
		
		while ( L != "X"){
		
		System.out.println("Welches Land?");
		L = in.readLine();
		System.out.println("Welches Fach?");
		F = in.readLine();
		System.out.println("Welche Note?");
		note = Integer.parseInt(in.readLine());
		
		

		switch(L) {
		
		
		case "D":
		
					{	switch(note) {
		
						case 1:
							System.out.println("Ihre Note im Fach "+ F +" war sehr gut!");
							break;
						case 2:
							System.out.println("Ihre Note im Fach "+ F +" war gut!");
							break;
						case 3:
							System.out.println("Ihre Note im Fach "+ F +" war befriedigend!");
							break;
						case 4:
							System.out.println("Ihre Note im Fach "+ F +" war ausreichend!");
							break;
						case 5:
							System.out.println("Ihre Note im Fach "+ F +" war mangelhaft!");
							break;
						case 6:
							System.out.println("Ihre Note im Fach "+ F +" war ungenügend!");
							break;
					}	
					break;
					}
			
		case "N":
			
					{	switch(note) {
		
						case 1:
							System.out.println("Ihre Note im Fach "+ F +" war sehr schlecht!");
							break;
						case 2:
							System.out.println("Ihre Note im Fach "+ F +" war schlecht!");
							break;
						case 3:
							System.out.println("Ihre Note im Fach "+ F +" war stark ungenügend!");
							break;
						case 4:
							System.out.println("Ihre Note im Fach "+ F +" war ungenügend!");
							break;
						case 5:
							System.out.println("Ihre Note im Fach "+ F +" war fast genügend!");
							break;
						case 6:
							System.out.println("Ihre Note im Fach "+ F +" war genügend!");
							break;
						case 7:
							System.out.println("Ihre Note im Fach "+ F +" war ausreichend!");
							break;
						case 8:
							System.out.println(" Ihre Note im Fach "+ F +" war gut!");
							break;	
						case 9:
							System.out.println("Ihre Note im Fach "+ F +" war sehr gut!");
							break;
						case 10:
							System.out.println("Ihre Note im Fach "+ F +" war ausgezeichnet!");
							break;	
					}		
					break;		
					}	
					
		case "S":
			
					{	switch(note) {
					case 0:
						System.out.println("Ihre Note im Fach "+ F +" war sehr mangelhaft!");
						break;
					case 1:
						System.out.println("Ihre Note im Fach "+ F +" war sehr mangelhaft!");
						break;
					case 2:
						System.out.println("Ihre Note im Fach "+ F +" war sehr mangelhaft!");
						break;
					case 3:
						System.out.println("Ihre Note im Fach "+ F +" war ungenügend!");
						break;
					case 4:
						System.out.println("Ihre Note im Fach "+ F +" war ungenügend!");
						break;
					case 5:
						System.out.println("Ihre Note im Fach "+ F +" war ausreichend!");
						break;
					case 6:
						System.out.println("Ihre Note im Fach "+ F +" war gut!");
						break;
					case 7:
						System.out.println("Ihre Note im Fach "+ F +" war bemerkenswert!");
						break;
					case 8:
						System.out.println("Ihre Note im Fach "+ F +" war bemerkenswert!");
						break;	
					case 9:
						System.out.println("Ihre Note im Fach "+ F +" war ausgezeichnet!");
						break;
					case 10:
						System.out.println("Ihre Note im Fach "+ F +" war ausgezeichnet!");
						break;	
				}		
				break;		
				}
		
				
					}	
				}
			}
		}


Würd mich freuen wenn ihr mir ein paar Anregungen geben könntet :)

Gruß, Alex
 
Hi Alex und Willkommen hier im Forum,

In Java solltest du Objekte (auch Strings) nicht über "==" vergleichen, sondern über equals().
Dies ist zum Beispiel in der Bedingung der While-Schleife der Fall.

Hier noch ein paar grundlegende Konventionen der Java Schreibweise:
- Klassenname in CamelCase, erster Buchstabe groß
- Variablen und Methoden auch camelCase, erster Buchstabe klein

Übrigens ist dein Programm viel zu umständlich, du hast sehr viel Redundanz drin.

Habe mal ein Beispiel für Deutschland gemacht, versuch das auch für die anderen Länder einzubauen:
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Notensysteme {
	private static final String[] DEUTSCH = {
		"sehr gut",
		"gut",
		"befriedigend",
		"ausreichend",
		"mangelhaft",
		"ungenügend"
	};

	public static void main(final String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

		String land = null;
		String fach = null;
		int note;

		while (!"x".equals(land) && !"X".equals(land)) {
			System.out.println("Welches Land?");
			land = in.readLine();
			System.out.println("Welches Fach?");
			fach = in.readLine();
			System.out.println("Welche Note?");
			note = Integer.parseInt(in.readLine());

			switch (land) {
				case "D": {
					String bezeichnung = DEUTSCH[note - 1];
					System.out.println("Ihre Note im Fach " + fach + " + war '"
							+ bezeichnung + "'.");
					break;
				}
				case "N":

				{
					switch (note) {

						case 1:
							System.out.println("Ihre Note im Fach " + fach
									+ " war sehr schlecht!");
							break;
						case 2:
							System.out
									.println("Ihre Note im Fach " + fach + " war schlecht!");
							break;
						case 3:
							System.out.println("Ihre Note im Fach " + fach
									+ " war stark ungenügend!");
							break;
						case 4:
							System.out.println("Ihre Note im Fach " + fach
									+ " war ungenügend!");
							break;
						case 5:
							System.out.println("Ihre Note im Fach " + fach
									+ " war fast genügend!");
							break;
						case 6:
							System.out
									.println("Ihre Note im Fach " + fach + " war genügend!");
							break;
						case 7:
							System.out.println("Ihre Note im Fach " + fach
									+ " war ausreichend!");
							break;
						case 8:
							System.out.println(" Ihre Note im Fach " + fach + " war gut!");
							break;
						case 9:
							System.out
									.println("Ihre Note im Fach " + fach + " war sehr gut!");
							break;
						case 10:
							System.out.println("Ihre Note im Fach " + fach
									+ " war ausgezeichnet!");
							break;
					}
					break;
				}

				case "S":

				{
					switch (note) {
						case 0:
							System.out.println("Ihre Note im Fach " + fach
									+ " war sehr mangelhaft!");
							break;
						case 1:
							System.out.println("Ihre Note im Fach " + fach
									+ " war sehr mangelhaft!");
							break;
						case 2:
							System.out.println("Ihre Note im Fach " + fach
									+ " war sehr mangelhaft!");
							break;
						case 3:
							System.out.println("Ihre Note im Fach " + fach
									+ " war ungenügend!");
							break;
						case 4:
							System.out.println("Ihre Note im Fach " + fach
									+ " war ungenügend!");
							break;
						case 5:
							System.out.println("Ihre Note im Fach " + fach
									+ " war ausreichend!");
							break;
						case 6:
							System.out.println("Ihre Note im Fach " + fach + " war gut!");
							break;
						case 7:
							System.out.println("Ihre Note im Fach " + fach
									+ " war bemerkenswert!");
							break;
						case 8:
							System.out.println("Ihre Note im Fach " + fach
									+ " war bemerkenswert!");
							break;
						case 9:
							System.out.println("Ihre Note im Fach " + fach
									+ " war ausgezeichnet!");
							break;
						case 10:
							System.out.println("Ihre Note im Fach " + fach
									+ " war ausgezeichnet!");
							break;
					}
					break;
				}

			}
		}
	}
}

Grüße,
BK
 
Hey,

danke erstmal für die nützliche Antwort.
Habs jetz mal für alle umgesetzt und das sieht jetz schon viel besser aus^^

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Test {
    private static final String[] DEUTSCH = {
        "sehr gut",
        "gut",
        "befriedigend",
        "ausreichend",
        "mangelhaft",
        "ungenügend"
    };
    private static final String[] HOLLAND = {
    	"sehr schlecht",
    	"schlecht",
    	"stark ungenügend",
    	"ungenügend",
    	"fast genügend",
    	"genügend",
    	"ausreichend",
    	"gut",
    	"sehr gut",
    	"ausgezeichnet",
    };
    private static final String[] SPANIEN = {
    	"sehr mangelhaft",
    	"sehr mangelhaft",
    	"sehr mangelhaft",
    	"ungenügend",
    	"ungenügend",
    	"ausreichend",
    	"gut",
    	"bemerkenswert",
    	"bemerkenswert",
    	"sehr gut",
    	"sehr gut",
    	"ausgezeichnet",
    };
 
    public static void main(final String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
 
        String land = null;
        String fach = null;
        int note;
 
        while (!"x".equals(land) && !"X".equals(land)) {
            System.out.println("Welches Land?");
            land = in.readLine();
            System.out.println("Welches Fach?");
            fach = in.readLine();
            System.out.println("Welche Note?");
            note = Integer.parseInt(in.readLine());
 
            switch (land) {
                case "D": {
                    String bezeichnung = DEUTSCH[note - 1];
                    System.out.println("Ihre Note im Fach " + fach + " war '"
                            + bezeichnung + "'.");
                    break;
                }
                case "N":
 
                {
                	String bezeichnung = HOLLAND[note - 1];
                    System.out.println("Ihre Note im Fach " + fach + " war '"
                            + bezeichnung + "'.");
                    }
                    break;
                
 
                case "S":
 
                {
                	String bezeichnung = SPANIEN[note - 1];
                    System.out.println("Ihre Note im Fach " + fach + " war '"
                            + bezeichnung + "'.");
                            break;
                }
                    
                }
 
            }
        }
    }



Jetz bleibt nur noch das Problem, dass die Ausgabe der Noten erst erfolgen soll, nachdem alle Noten eingegeben wurden..
Hat da jemand noch nen Tipp oder ne Richtung die ich einschlagen könnte, denn ich bin kein Fan davon irgendwelche Lösungen abzuschreiben, denn das bringt keinem was..
 
Hi,

Genau, auf deinen jetztigen Stand wollte ich hinaus ;-)
Wie sieht der Workflow genau aus? Was soll in der Schleife abgefragt werden? Das Fach und die Note, oder nur letzteres?
Schreib mal einfach die gewünschten Ein- und Ausgaben runter, zum Beispiel so:

Code:
o: Welches Land?
i: D
o: Welches Fach?
i: Mathe
o: Welche Note? ("x" zum beenden)
<hier schleife>
i: 3
i: 5
i: 2
i: x
<ende schleife>
o: <ausgabe noten bezeichnungen>
<ende programm>

Hab ich das so richtig verstanden?

Grüße,
BK
 
Jetz bleibt nur noch das Problem, dass die Ausgabe der Noten erst erfolgen soll, nachdem alle Noten eingegeben wurden..
Hat da jemand noch nen Tipp oder ne Richtung die ich einschlagen könnte, denn ich bin kein Fan davon irgendwelche Lösungen abzuschreiben, denn das bringt keinem was..

Anstatt dein Ergebnis auszugeben, kannst du die einzelnen Aussagen in einm String verketten. Diesen String gibst du dann am Ende aus. Denke dabei an den Zeilenumbruch.
 
Freut mich, dass ihr so zahlreich antwortet, war leider am we verhindert, deswegen meld ich mich jetz erst..

Laut Angabe soll es so aussehen:

Java:
Welches Land?> D
Welches Fach?> Programmierung 1
Welche Note?> 2
Welches Land?> D
Welches Fach?> Theoretische Informatik
Welche Note?> 1
Welches Land?> D
Welches Fach?> Eziente Algorithmen
Welche Note?> 2
Welches Land?> X
Dann lautet die Ausgabe am Ende des Programms:
Ihre Leistung in Programmierung 1 war gut.
Ihre Leistung in Theoretische Informatik war sehr gut.
Ihre Leistung in Effiziente Algorithmen war gut.


Ich mach mich jetz mal ans Werk und setz mich mit dem StringBuilder auseinander !

Gruß Alex


Edith sagt:
Ich dachte grad ich habs überblickt mit dem StringBuilder, aber eclipse sagt mir jetz, dass ich die Ergebnisse da nicht reinmachen kann, weil sie ein String und kein StringBuilder sind..
 
Zuletzt bearbeitet:
Ich dachte grad ich habs überblickt mit dem StringBuilder, aber eclipse sagt mir jetz, dass ich die Ergebnisse da nicht reinmachen kann, weil sie ein String und kein StringBuilder sind..

Ich glaube du hast den StringBuilder noch nicht verstanden ;-)
Du erstellst einen neuen StringBuilder,
führst x-mal append(text) durch
und gibst am Ende mit toString() den finalen String aus.

Leider bin ich nicht so gut darin zu erklären, warum hier StringBuilder verwendet werden sollte anstatt String, aber vielleicht googlest du einfach kurz - es gibt hunderte Seiten, die dies erläutern.
 
Zuletzt bearbeitet:
Da hattest du wohl recht :p

Jetz hab ichs aber und bis auf die blöde exception funktioniert jetz alles so wie ich will!

Ich danke euch vielmals, ohne die Hilfe hier hätt ich gar nix abgeben können und jetz hab ichs sogar noch verstanden ;)
 

Neue Beiträge

Zurück