Monotonie feststellen

C

ChristianC1403

Gast
Ich versuchte gerade ein kleines Programm in Java zu schreiben. Dabei sollen 4 Zahlen (a,b,c,d) eingegeben werden.
Wenn a<b<c<d ist, soll "S" ausgegeben werden.
Wenn a<=b<=c<=d ist, soll "M" ausgegeben werden.
Sonst soll "N" ausgegeben werden.
(Wie man sieht, soll es monotone Steigungen bestimmen.)

Allerdings gibt es bei den Fällen:

1,2,3,4
1,2,2,3
1,2,3,3
1,5,2,3
1,2,5,3

Jeweils ein "N" nach der richtigen Ausgabe aus. Ich habe leider keine Idee woran dies liegen könnte. Hoffentlich kann hier jemand
den Fehler finden.

Hier ist der entscheidente Codeausschnitt:

Java:
import java.util.Scanner;

class Monotonie {
	public static void main(String[] args){
	
	Scanner eingabeEins = new Scanner (System.in);
	Scanner eingabeZwei = new Scanner (System.in);
	Scanner eingabeDrei = new Scanner (System.in);
	Scanner eingabeVier = new Scanner (System.in);
	
	
	int a = eingabeEins.nextInt();
	int b = eingabeZwei.nextInt();
	int c = eingabeDrei.nextInt();
	int d = eingabeVier.nextInt();
	System.out.println();
	
	if(a<b)
		if(b<c)
			if(c<d)
			System.out.println("S");
			else 
				if(c==d)
				System.out.println("M");
				else 
				System.out.println("N");
		else 
		if(b==c)
			if(c<=d)
			System.out.println("M");
			else
			System.out.println("N");
		else 
		System.out.println("N");
	if(a==b)
		if(b<=c)
			if(c<=d)
			System.out.println("M");
			else
			System.out.println("N");
		else
		System.out.println("N");
	else
	System.out.print("N");		
		}
}
 
Zuletzt bearbeitet von einem Moderator:

XHelp

Top Contributor
Vermutlich kommst irgendeine if-Anfrage durcheinander... verschachtele die nicht so extrem und verwende die geschweiften Klammern, dann solltest du den Fehler erkennen

P.S. Sicher, dass du dich in der Aufgabenstellung nicht vertippt hast? Mit a<b<c<d und a<=b<=c<=d
 
Zuletzt bearbeitet:
G

<GUEST>SPiKEe

Gast
du hast einfach ein ELSE vergessen
hier mal die korrigierte variante mit RICHTIGER einrückung ...
Java:
import java.util.Scanner;
 
class Monotonie
{
	public static void main(String[] args)
	{
		Scanner eingabeEins = new Scanner (System.in);
		Scanner eingabeZwei = new Scanner (System.in);
		Scanner eingabeDrei = new Scanner (System.in);
		Scanner eingabeVier = new Scanner (System.in);
		int a = eingabeEins.nextInt();
		int b = eingabeZwei.nextInt();
		int c = eingabeDrei.nextInt();
		int d = eingabeVier.nextInt();
		System.out.println("");
		if(a<b)
		{
			if(b<c)
			{
				if(c<d)
				{
					System.out.println("S");
				}
				else
				{
					if(c==d)
					{
						System.out.println("M");
					}
					else
					{
						System.out.println("N");
					}
				}
			}
			else
			{
				if(b==c)
				{
					if(c<=d)
					{
						System.out.println("M");
					}
					else
					{
						System.out.println("N");
					}
				}
				else
				{
					System.out.println("N");
				}
			}
		}
		else
		{
			if(a==b)
			{
				if(b<=c)
				{
					if(c<=d)
					{
						System.out.println("M");
					}
					else
					{
						System.out.println("N");
					}
				}
				else
				{
					System.out.println("N");
				}
			}
			else
			{
				System.out.print("N");
			}
		}
	}
}

erklärung und unterschied zu deinem source

du hast folgende struktur

if
...
if
...
else

du musst aber folgende haben damit die funktion greift

if
..
else
>if
>...
>else

denn sonst wird IMMER in den letzten else block gesprungen was eig IMMER zu der ausgabe N führt ...
 
C

ChristianC1403

Gast
Alles klar, vielen Dank.

Das bedeutet ich muss immer gleich viele else, wie if Anweisungen haben.
Und auf die Klammern lege ich zukünftig auch mehr Wert.
 

Illuvatar

Top Contributor
Was spricht eigentlich gegen so etwas?
Java:
if (a < b && b < c && c < d) {
  // S
} else if (a <= b && b <= c && c <= d) {
  // M
} else {
  // N
}
 

Marco13

Top Contributor
... und (auch wenn ich befürchte, dass meine Denkstrukturen so ... akademisch-theoretisch geprägt sind, dass bei der Frage nach der Lösung für eine Aufgabe niemand die Frage hören will, worum es in dieser Aufgabe vielleicht eigentlich gehen könnte, sondern nur irgendwas hingehudelt haben will, was man abgeben kann, um formal die zum Bestehen mindestens notwendige Anzahl Punkte zu bekommen :autsch: ) was spricht dagegen, das ganze für beliebig Lange Zeichenketten zu implementieren? Ich bin jedenfalls der festen Überzeugung: Wenn eine Erweiterung dieses Programmes von 4 auf 5 Zeichen mehr erfordert, als in der main eine Zeile wie
[c]doIt(1,2,3,4);[/c]
in eine Zeile wie
[c]doIt(1,2,3,4,5);[/c]
zu ändern, hat man etwas falsch gemacht!
 

XHelp

Top Contributor
Wenn eine Erweiterung dieses Programmes von 4 auf 5 Zeichen mehr erfordert, als in der main eine Zeile wie
[c]doIt(1,2,3,4);[/c]
in eine Zeile wie
[c]doIt(1,2,3,4,5);[/c]
zu ändern, hat man etwas falsch gemacht!

Hm? Kann dem Gedanken irgendwie nicht folgen. Allerdings ist doIt in meiner Vorstellung:
Code:
void doIt(int... zahlen)
. Bzw. sehe ich auf anhieb nicht, worauf du hinaus willst.
 

Marco13

Top Contributor
Ich will darauf hinaus, dass alle bisher angedeuteten Lösungen (if-Kaskade :autsch: oder auch die if-Einzeiler) nur genau für den Fall von 4 Zahlen funktionieren. 4 gibt es nicht. Es gibt nur 0, 1, und "viele".
 
G

<GUEST>SPiKEe

Gast
das mag zwar alles stimmen und ist auch sicherlich praxis-näher ... aber das ist einfach nicht die aufgabe ...
die aufgabe war das ganze für eine menge von 4 eingaben zu realisieren was durchaus noch mit einer IF-kaskade machbar ist ...
außerdem geht es hier um grundlagen ... da sollten dinge wie rekursion ERSTMAL nicht so wichtig sein ...
ansonsten hast du in dem sinn natürlich völlig recht ...
zeig ihm doch einfach eine rekursive implementierung ... vorallem für die eingaben ... =P
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
Jose05 Fehler im Programm feststellen Java Basics - Anfänger-Themen 2
C Programm das feststellen kann, ob eine eingegebene Zahl einem Schaltjahr entspricht, richtig geschrieben? Java Basics - Anfänger-Themen 11
T Feststellen, dass Wert zu groß; Caesar Chiffre Java Basics - Anfänger-Themen 3
M Aufrufendes Objekt feststellen Java Basics - Anfänger-Themen 9
T Erste Schritte Ende von Wörtern in einer Zeile feststellen? Java Basics - Anfänger-Themen 5
Y Feststellen ob ein Jahr vergangen ist Java Basics - Anfänger-Themen 6
A Feststellen ob Desktop.print("*.pdf") fertig ist Java Basics - Anfänger-Themen 6
P Datentypen Hauefigkeit feststellen Java Basics - Anfänger-Themen 19
E Position erkennen und überlappungen feststellen Java Basics - Anfänger-Themen 4
N OOP gewinner in einem Spiel feststellen Java Basics - Anfänger-Themen 4
H Eclipse: Programm startet nicht, wie Fehler feststellen? Java Basics - Anfänger-Themen 5
M Obsolete Komponenten feststellen? Java Basics - Anfänger-Themen 3
G Feststellen, was ausgelöst wurde Java Basics - Anfänger-Themen 2
G Feststellen, ob erstes Zeichen eines Strings eine Ziffer ist Java Basics - Anfänger-Themen 11
R Verzeichnis feststellen Java Basics - Anfänger-Themen 14
W Zeilenposition in JTextArea feststellen(ohne Caret) Java Basics - Anfänger-Themen 7
G Länge einer Enumeration feststellen Java Basics - Anfänger-Themen 15
M Feststellen, das Textboxen leer sind! Java Basics - Anfänger-Themen 3
M Text in JInternalFrames - Source feststellen? Java Basics - Anfänger-Themen 6
B Disconnect des Clients feststellen Java Basics - Anfänger-Themen 2
reibi Feststellen ob Datei fertiggeschrieben ist. Java Basics - Anfänger-Themen 12
L feststellen ob args[2] gesetzt ist? Java Basics - Anfänger-Themen 2
G Änderungen in TextFelder feststellen Java Basics - Anfänger-Themen 4
R Integerwerte von enum-Elementen feststellen Java Basics - Anfänger-Themen 2
D zeilenumbruch feststellen Java Basics - Anfänger-Themen 8
T Feststellen wie viel Arbeitsspeicher belegt ist Java Basics - Anfänger-Themen 2
G Vergleichen von Objekten, selektiertes Objekt feststellen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben