Problem bei Schleife

Status
Nicht offen für weitere Antworten.
M

MisterX

Gast
Hi, ich habe folgende Aufgabe zu lösen:

Es sollen 6 Zahlen eingegeben werden. Nach jeder Eingabe muss geprüft werden ob die Zahl bereits vorhanden ist. Wenn ja, muss eine andere Zahl eingegeben werden.
Hier mein aktueller Code. Ner leider ist hier ein Bug drin. Wenn ich eine vorhandene Zahl eingebe, komme ich in die Abfrageschleife. Nur hier wird nicht geprüft ob die vorhandene Zahl schon vorhanden ist. Ich habe hier ein Katze jagt Schwanz Problem....

[HIGHLIGHT="Java"]import java.util.Scanner;

public class Eingabe
{
public static void main (String[] args)
{
Scanner sc = new Scanner(System.in);
int i;
int z;
int[]zahlen = new int[6];

// Zahleneingabe
for(i=0; i<zahlen.length;i++)
{
System.out.print("Bitte geben Sie die " +(i+1) + ". Zahl ein: ");
zahlen = sc.nextInt();

// Durchlaufe die Schleife und Prüfe
// System.out.println("Aktueller Zähler: "+i);
for(z=0;z<i;z++)
{
if(zahlen==zahlen[z])
{
do
{
System.out.println("Meldung: die " +zahlen +" ist bereits eingegeben worden");
System.out.print("Bitte geben Sie die " +(i+1) + ". Zahl ein: ");
zahlen = sc.nextInt();
}
while(zahlen==zahlen[0]);
}

}

}
}
}[/HIGHLIGHT]
 
Zuletzt bearbeitet von einem Moderator:

hdi

Top Contributor
[HIGHLIGHT="Java"]
// for schleife anfang
int input;
do{
System.out.print("Geben Sie eine Zahl ein, die es bisher nicht gab: ");
input = sc.nextInt();
}
while(arrayContains(zahlen,input));
zahlen[count] = input;
// for-Schleife ende
[/HIGHLIGHT]

[HIGHLIGHT="Java"]private boolean arrayContains(int[] array, int target){
for(int i = 0;i<array.length;i++){
if(array == target){
return true;
}
}
return false;
}[/HIGHLIGHT]
 
Zuletzt bearbeitet:

Ark

Top Contributor
Hier meine Variante:
[HIGHLIGHT="Java"] // Durchlaufe die Schleife und Prüfe
// System.out.println("Aktueller Zähler: "+i);
for(z=0;z<i;z++)
{
if(zahlen==zahlen[z])
{
System.out.println("Meldung: die " +zahlen +" ist bereits eingegeben worden");
i--; // diese Zeile hier ist ausschlaggebend
break;
}
}[/HIGHLIGHT]
Ungetestet, wie immer. ;)

Ark
 

hdi

Top Contributor
Wobei ich sowas nicht empfehlen würde Ark.
Wenn man eine for-Schleife sieht

for(int i = 0; i<x;i++)

geht man immer davon aus, dass das ganze x mal durchlaufen wird.
Da drin dann eine Manipulation von i einzubauen finde ich design-technisch nich so sauber.
 

Ebenius

Top Contributor
So könnte man's doch machen (und auch noch gut aufteilen): [HIGHLIGHT="Java"]import java.util.Scanner;

public class Eingabe
{
public static void main (String[] args)
{
Scanner sc = new Scanner(System.in);
int i;
int z;
int[]zahlen = new int[6];

// Zahleneingabe
for(i=0; i<zahlen.length;i++)
{
System.out.print("Bitte geben Sie die " +(i+1) + ". Zahl ein: ");
zahlen = sc.nextInt();

while(indexOf(0, i-1, zahlen, zahlen) != -1) {
{
System.out.println("Meldung: die " +zahlen +" ist bereits eingegeben worden");
System.out.print("Bitte geben Sie die " +(i+1) + ". Zahl ein: ");
zahlen = sc.nextInt();
}
}
}

public static int indexOf (int ersterIndex, int letzterIndex, int[] zahlen, int gesuchteZahl)
{
for (int i = ersterIndex; i <= letzterIndex; i ++)
{
if (zahlen == gesuchteZahl)
{
return i;
}
}

// nicht gefunden
return -1;
}
}[/HIGHLIGHT]
hdi, Dein Beispiel geht wahrscheinlich schief, wenn jemand 0 eingibt, oder? ;)
Ebenius
 
M

MisterX

Gast
Hi,
danke für die schnelle Antwort.
Ich bin als Newbie ein wenig überfordert mit dem Private.
Was bedeutet das genau?
(Soweit bin ich noch nicht)
 

hdi

Top Contributor
@Ebenius: Ich weiss, das warn Witz ;)

@MisterX

private ist ein access modifier, so wie public (kennst du wahrscheinlich).
Heisst nur: Diese Methode ist nur in dieser Klasse sichtbar.

..und falls du jetzt meinen Code nutzt: Bedenke was Ebenius sagte:
Das ganze funzt nicht wenn man eine 0 eingibt, weil am Anfang das Array lauter
nullen hat!
Also entweder du füllst es mit -1, oder wenn man jede x-beliebige Zahl eingeben darf,
nimm die Version von Ebenius
 
M

MisterX

Gast
War schon wieder zu langsam.
Das geht ja ab hier.
Ist also erledigt:

Oh, Hilfe,
ich bin leicht überfordert mit den vielen Antworten :))
Um diesen Code gings mir.
Der zweite Teil ist mir unklar. (Auch unklar wie der komplette Sourcecode dann aussieht.

[highlight="Java"]
// for schleife anfang
int input;
do{
System.out.print("Geben Sie eine Zahl ein, die es bisher nicht gab: ");
input = sc.nextInt();
}
while(arrayContains(zahlen,input);
zahlen[count] = input;
// for-Schleife ende
[/highlight]

[highlight="Java"]private boolean arrayContains(int[] array, int target){
for(int i = 0;i<array.length;i++){
if(array == target){
return true;
}
}
return false;
}[/highlight]
 

Ark

Top Contributor
Wenn man eine for-Schleife sieht

for(int i = 0; i<x;i++)

geht man immer davon aus, dass das ganze x mal durchlaufen wird.
Da drin dann eine Manipulation von i einzubauen finde ich design-technisch nich so sauber.
Ach, und deine arrayContains()-Methode ist sauberer, weil da die Schleife mit return anhält und nicht mit break? ;)

Ark
 

Leroy42

Top Contributor
Zu Arc habe ich schon eine besondere Meinung.

Aber in dem, was er hier sagte, hat er schon vollkommen Recht.

Und mit einem return aus dem Innern einer while-Schleife herauszuspringen
ist nicht so schlimm!
 

hdi

Top Contributor
Ach, und deine arrayContains()-Methode ist sauberer, weil da die Schleife mit return anhält und nicht mit break? ;)
Auf jeden Fall, das ist toal egal. Alleine schon die Signatur der Methode ist unmissverständlich.
Sie liefert zurück ob eine Zahl in einem Array vorhanden ist.
Ob du breakst oder direkt per return rausreichst, wayne...

Aber deine for-Schleife führt den Programmierer beim Betrachten hinter's Licht,
von daher bleibe ich bei meiner Meinung.
(Wobei ich nicht vorhab eine fette Diskussion zu starten, so eine Todessünde ist
es nun auch wieder nicht.. Kein Stress ;))
 
Zuletzt bearbeitet von einem Moderator:

Ebenius

Top Contributor
Ach, und deine arrayContains()-Methode ist sauberer, weil da die Schleife mit return anhält und nicht mit break? ;)
Vor allem ist es besser, die Funktionalität, einen Eintrag eines Arrays zu suchen, auszugliedern. Davon abgesehen ist das Modifizieren der Laufvariable einer for-Schleife meist unschön und verwirrt den Programmierer meist mehr als es ihm bringt. Besonders einem Anfänger würde ich nicht dazu raten, weil er dann noch weniger durchblickt.

Ebenius
 

hdi

Top Contributor
@Leroy: Und ich les deinen Post 17 mal weil mir nicht klar ist was du jetzt eig. sagen willst xD
Aber anscheinend doch nix gegen mich, d.h. ich kann mir das übertriebene Offtopic-Gemetzel
ersparen, das ich jetzt gleich gestartet hätte... :p
 

Ark

Top Contributor
Es stimmt schon, dass man die Suche auslagern kann/sollte. Aber wenn es darum geht, Code mit minimalen Redundanzen im Gesamtsystem zu entwerfen, sollte man hier besser gleich zum Collections-Framework greifen. ;)

Da aber die Aufgabe hier nur darin bestand, eine weitere Implementierung für ein schon seit Jahrhunderten gelöstes Problem zu bieten, habe ich das so schnell und einfach wie möglich eingebaut.

Und wo da das Problem mit der i-Dekrementierung sein soll, weiß ich auch nicht: Mit Ende der i-Schleife liegen genau zahlen.length unterschiedliche Zahlen in zahlen vor, also genau das, was im Schleifenkopf beschrieben ist.

Ark
 

hdi

Top Contributor
Es geht hier glaub ich nich so um Redundanz sondern um Lesbarkeit.
Ein Anfänger baut nun mal schnell einen Bug in einen Algo, der nur ein Array
auf eine Zahl prüft, wenn diese Funktionalität mitten in einem anderen Algo drinsteckt.
Das hat nichts mit Frameworks zu tun, das ist einfach "organisiertes Arbeiten", wenn
man es vollkommen abgehoben ausdrücken möchte ;)
 

Ebenius

Top Contributor
Und wo da das Problem mit der i-Dekrementierung sein soll, weiß ich auch nicht: Mit Ende der i-Schleife liegen genau zahlen.length unterschiedliche Zahlen in zahlen vor, also genau das, was im Schleifenkopf beschrieben ist.
Das ist recht einfach gesagt. Bei einer for-Schleife mit i:=0, i<n geht jeder Normalnutzer von genau n Schleifendurchläufen aus. Wenn man dieses Verhalten in der Mitte der Schleife ändert, handelt es sich um einen Spezialfall in dem die Schleife mit einem Index mehrfach durchlaufen werden kann. Das widerspricht dem üblichen Verhalten des Konstrukts und verwirrt besonders einen Anfänger schnell, deswegen lässt man das in der Regel sein.

Ebenius
 

0x7F800000

Top Contributor
Das widerspricht dem üblichen Verhalten des Konstrukts und verwirrt besonders einen Anfänger schnell, deswegen lässt man das in der Regel sein.
wer hat hier was von verwirrung der Anfänger gesagt?
[highlight=Java]
import java.util.*;
public class _ {
public static void main(String... _) {
Scanner sc = new Scanner(System.in);
Collection<Integer> a;
for(a=new TreeSet<Integer>(); a.size()<6; a.add(sc.nextInt())){
System.out.println("Bisher eingegebene Zahlen: "+a);
}
System.out.println("Ende: "+a);
}
}
[/highlight]
find's ohne die ganzen + - irgendwie übersichtlicher ;)
 

hdi

Top Contributor
Andrey dieser Code macht aber nicht das was er will oder?
Oder verweigert so ein TreeSet irgendwie eine bereits enhaltene Zahl?
Mir ist durchaus klar dass dein Code eher eine Art "Witz" sein soll, aber
mich interessiert ob das tatsächlich die vollständige Lösung für sein Problem ist.
 

Ebenius

Top Contributor
Andrey dieser Code macht aber nicht das was er will oder?
Oder verweigert so ein TreeSet irgendwie eine bereits enhaltene Zahl?
Jedes Set beinhaltet jeden Eintrag nur einmal. Wenn ich also zum zweiten mal die Zahl 7 einfüge, dann wird sie nicht nochmal eingefügt. Dem entsprechend wird auch size() keinen höheren Wert zurückliefern als vor dem Versuch des Einfügens des Duplikats. Das Resultat besteht aus n >= 6 Eingaben und einem Set mit genau 6 verschiedenen Werten.

Ebenius
 

hdi

Top Contributor
Aha, da sieht man mal dass ich in über 1 gutem Jahr intensivem Java noch niemals ein Set
benutzt habe :autsch: Obwohl ich es oft hätte gebrauchen können, wenn es sich so
verhält. Tja, manchmal haste Pech.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Best Practice Problem mit (einfacher) Doppelt-Schleife Java Basics - Anfänger-Themen 53
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
J Schleife Problem Java Basics - Anfänger-Themen 2
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
S Doppel For Schleife mit Arrays - Problem bei der Ausgabe Java Basics - Anfänger-Themen 4
F Problem do while Schleife und Scanner Java Basics - Anfänger-Themen 2
A Kleines Abbruch-Problem mit Do-While-Schleife Java Basics - Anfänger-Themen 4
P Problem bei Fakultät mit "for"-Schleife Java Basics - Anfänger-Themen 12
D Textfield im Game ,Problem: while-Schleife Java Basics - Anfänger-Themen 1
S Problem mit for-Schleife Java Basics - Anfänger-Themen 4
D Problem mit Schleife / Newtonverfahren Java Basics - Anfänger-Themen 4
F Problem mit der While schleife und dem Scanner Java Basics - Anfänger-Themen 2
vodkaz For Schleife Verständnis Problem Java Basics - Anfänger-Themen 4
M For Schleife Problem Java Basics - Anfänger-Themen 2
S problem bei verschachtelter for-schleife Java Basics - Anfänger-Themen 5
C Problem mit try-catch in Schleife Java Basics - Anfänger-Themen 15
F Problem mit for-Schleife Java Basics - Anfänger-Themen 4
L Nummern Generator (mit do-while Schleife) Problem Java Basics - Anfänger-Themen 7
B Problem mit for-Schleife Java Basics - Anfänger-Themen 4
C Problem mit Schleife Java Basics - Anfänger-Themen 3
Killerjo96 Erste Schritte Problem mit dem Sichern einer If Schleife Java Basics - Anfänger-Themen 5
F Problem Math.random in for-Schleife Java Basics - Anfänger-Themen 8
K Problem mit der while - Schleife Java Basics - Anfänger-Themen 9
E Problem mit for schleife/ try-catch block Java Basics - Anfänger-Themen 7
M Problem bei Schleife + Methode Java Basics - Anfänger-Themen 2
C Euler'sche Zahl berechnen, Problem bei for-schleife Java Basics - Anfänger-Themen 4
D For Schleife und DrawString - Problem Java Basics - Anfänger-Themen 20
G problem mit while schleife Java Basics - Anfänger-Themen 8
A For-Schleife Problem Java Basics - Anfänger-Themen 11
J Problem - Schleife Java Basics - Anfänger-Themen 16
V Problem mit einer While Schleife Java Basics - Anfänger-Themen 8
S Unverstandenes Problem mit for schleife Java Basics - Anfänger-Themen 2
A If-Schleife spinnt - ganz einfach Code - Riesen Problem :) Java Basics - Anfänger-Themen 9
Luk10 Problem mit For-Schleife Java Basics - Anfänger-Themen 2
F Problem mit einer Schleife Java Basics - Anfänger-Themen 10
A Problem mit vereinfachter For-Schleife Java Basics - Anfänger-Themen 5
O Problem mit For-schleife Java Basics - Anfänger-Themen 3
O Methode - Problem mit Subtraktion in einer while-Schleife Java Basics - Anfänger-Themen 2
A Problem mit BigInteger und Schleife Java Basics - Anfänger-Themen 13
S Problem mit Schleife - Objektwert aendert sich nach erstellung Java Basics - Anfänger-Themen 17
_SeiA_ Suche Schleife/Algorythmus für ein Problem Java Basics - Anfänger-Themen 3
J FOR-Schleife Problem Java Basics - Anfänger-Themen 10
M Problem mit der For Schleife (else funzt nicht richtig) Java Basics - Anfänger-Themen 10
G Problem mit If und integrierter Schleife Java Basics - Anfänger-Themen 2
ChackZz Problem mit for-Schleife bei der Primzahlberechnung Java Basics - Anfänger-Themen 8
J problem mit schleife Java Basics - Anfänger-Themen 31
M Problem bei Do. While schleife Java Basics - Anfänger-Themen 10
S problem mit "for" schleife Java Basics - Anfänger-Themen 12
X Anfänger Problem mit Schleife Java Basics - Anfänger-Themen 3
R Problem mit for-Schleife Java Basics - Anfänger-Themen 6
Z Problem mit Schleife und korrekter Ausgabe: Java Basics - Anfänger-Themen 13
N kleines Problem mit meiner Schleife Java Basics - Anfänger-Themen 8
G Problem mit einfacher For-Schleife und Double Wert Java Basics - Anfänger-Themen 4
megachucky GUI-Problem in Verbindung mit while-Schleife und Listener Java Basics - Anfänger-Themen 4
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
H Problem mit Verzweigungen Java Basics - Anfänger-Themen 6
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
josfe1234 JAVA FX problem Java Basics - Anfänger-Themen 3
A Code Problem Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
K jackson Mapping - Problem mit Zeitzonen Java Basics - Anfänger-Themen 10
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
D Schleifen Problem Java Basics - Anfänger-Themen 2
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
J JAVA-Problem blockiert MEDIATHEKVIEW Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Neue Themen


Oben