Hallo,
ich habe ein Programm geschrieben, welches die Parität der eingegebenen Zahlen des Users ermittelt und sie ordnen soll. Leider hakt es bei der ermittlung des Minimumwertes(Ich wuerde es gerne in diesem im Ansatz erkennbaren Code loesen, weiß leider nur nicht, wo es da jetzt noch haengt).
Der Algorithmus soll durch eine PosOfMin() Methode aufgerufen werden (eine andere Version, welche funktionierte, nur diese mit PosOfMin() haut mir in bestimmten Situationen einige Dreher in die Ausgabe) .
Ich hoffe, ihr versteht und koennt mir sagen, wo der Bug ist. Sollte für euch denke ich nicht allzuschwer sein. Ich steh aber mittlerweile voll auf dem Schlauch und find ihn einfach nicht.
Wäre also lieb, wenn mir jemand von euch mal schnell auf die Sprünge helfen könnte!
P.S.: Nicht wundern, dass die Class in der die main-Methode ist, MasterMind 2 heißt, im selben Projekt ist naemlich noch ein kleines MasterMind auf Kommandozeilenebene, was aber einfach nicht aufgerufen wird.
Und hier nur die I/O Class, hier wird der Bug definitiv nicht sein. ) Nur fürs Protokoll.
Wäre euch wirklich sehr verbunden, wenn ihr mir mal sagen koenntet, wo es da haengt.
P.S.: Verzeiht mir die etwas missglückte Namensgebung an manchen Stellen was sortierendeZahl[] anbelangt.
ich habe ein Programm geschrieben, welches die Parität der eingegebenen Zahlen des Users ermittelt und sie ordnen soll. Leider hakt es bei der ermittlung des Minimumwertes(Ich wuerde es gerne in diesem im Ansatz erkennbaren Code loesen, weiß leider nur nicht, wo es da jetzt noch haengt).
Der Algorithmus soll durch eine PosOfMin() Methode aufgerufen werden (eine andere Version, welche funktionierte, nur diese mit PosOfMin() haut mir in bestimmten Situationen einige Dreher in die Ausgabe) .
Ich hoffe, ihr versteht und koennt mir sagen, wo der Bug ist. Sollte für euch denke ich nicht allzuschwer sein. Ich steh aber mittlerweile voll auf dem Schlauch und find ihn einfach nicht.
Wäre also lieb, wenn mir jemand von euch mal schnell auf die Sprünge helfen könnte!
P.S.: Nicht wundern, dass die Class in der die main-Methode ist, MasterMind 2 heißt, im selben Projekt ist naemlich noch ein kleines MasterMind auf Kommandozeilenebene, was aber einfach nicht aufgerufen wird.
Java:
public class MasterMind {
//int _anzahlTips = 0;
//int _zahlenArray[] = new int[4];
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// MasterMind masterMind = new MasterMind();
// masterMind.SpielStarten();
ParitaetSortieren paritaetSortieren = new ParitaetSortieren();
paritaetSortieren.EingabeUser();
}
Java:
public class ParitaetSortieren {
void EingabeUserTest() // Lediglich eine Testfunktion, mit der ich versucht habe, meinen Bug
// sichtbar zu machen. Einfach ignorieren und bei EingabeUser() starten.
{
SortierendeZahl[] result;
String eingabeDesUsers[] = EinlesenUserEingabe();
result = UserEingabeUmwandeln(eingabeDesUsers);
SortierendeZahl[] zahlen = Sort2(result);
ZahlenAusgeben(zahlen);
System.exit(0);
}
void EingabeUser() {
SortierendeZahl[] result;
String eingabeDesUsers[] = EinlesenUserEingabe();
result = UserEingabeUmwandeln(eingabeDesUsers);
SortierendeZahl[] ungeradeSortierteZahlen = Sort2(GetGefilterteZahlen(result, false));
SortierendeZahl[] geradeSortierteZahlen = Sort2(GetGefilterteZahlen(result, true));
ZahlenAusgeben(ungeradeSortierteZahlen);
System.out.println();
ZahlenAusgeben(geradeSortierteZahlen);
System.exit(0);
}
private String[] EinlesenUserEingabe() {
String result[];
UserHelper userHelper = new UserHelper();
String prompt = "Zahleneingabe: ";
String eingabeDesUsers = userHelper.getBenutzereingabe(prompt);
result = eingabeDesUsers.split(" ");
return result;
}
private SortierendeZahl[] UserEingabeUmwandeln(String[] eingabeDesUsers) {
SortierendeZahl[] result = new SortierendeZahl[eingabeDesUsers.length];
int arrayElementeAnzahl = eingabeDesUsers.length;
for (int i = 0; i < arrayElementeAnzahl; i++)
{
SortierendeZahl sortierendeZahl = new SortierendeZahl();
sortierendeZahl.setZahl(Integer.parseInt(eingabeDesUsers[i]));
result[i] = sortierendeZahl;
}
return result;
}
private SortierendeZahl[] GetGefilterteZahlen(SortierendeZahl[] zuFilterendeZahlen, boolean paritaet) {
SortierendeZahl[] result;
int anzahlElemente = zuFilterendeZahlen.length;
int gezaehlteZahlen = 0;
int arrayZaehlVariable = 0;
for (int i = 0; i < anzahlElemente ; i++)
{
if(paritaet == zuFilterendeZahlen[i].IsGerade())
{
gezaehlteZahlen++;
}
}
result = new SortierendeZahl[gezaehlteZahlen];
for (int i = 0; i < anzahlElemente ; i++)
{
if(paritaet == zuFilterendeZahlen[i].IsGerade())
{
result[arrayZaehlVariable] = zuFilterendeZahlen[i];
arrayZaehlVariable++;
}
}
return result;
}
SortierendeZahl[] ZahlenSortieren(SortierendeZahl[] sortierendeZahlen) {
SortierendeZahl[] result = sortierendeZahlen;
int anzahlElemente = result.length;
for( int i = 0; i < anzahlElemente; i++)
{
for(int j = 0; j < anzahlElemente; j++)
{
if(result[i].getZahl() < result[j].getZahl())
{
result = Swap(result, i, j);
}
}
}
result = sortierendeZahlen;
return result;
}
private SortierendeZahl[] Swap(SortierendeZahl[] sortierendeZahl, int i, int j)
{
SortierendeZahl[] result = sortierendeZahl;
SortierendeZahl temp;
temp = result[i];
result[i] = result[j];
result[j] = temp;
return result;
}
private SortierendeZahl[] Sort2(SortierendeZahl[] sortierendeZahl)
{
SortierendeZahl[] result = sortierendeZahl;
int anzahlElemente = result.length;
int position;
for(int i = 0; i < anzahlElemente; i++)
{
position = PosOfMin(sortierendeZahl, i);
if(sortierendeZahl[position].getZahl() < sortierendeZahl[i].getZahl())
{
result = Swap(result, position, i);
}
}
// result = sortierendeZahl;
return result;
}
private int PosOfMin(SortierendeZahl[] sortierendeZahl, int startPos)
{
int result = 0; int posDesMinimums = 0;
int anzahlElemente = sortierendeZahl.length;
SortierendeZahl tempMin = sortierendeZahl[startPos];
for(int i = startPos+1; i < anzahlElemente; i++)
{
if ( sortierendeZahl[i].getZahl() < tempMin.getZahl() )
{
tempMin = sortierendeZahl[i];
posDesMinimums = i;
System.out.println("Ich bin die posDesMinimums : "+posDesMinimums);
result = posDesMinimums;
}
}
return result;
}
private void ZahlenAusgeben(SortierendeZahl[] sortierendeZahlen){
int anzahlElemente = sortierendeZahlen.length;
for( int i=0; i < anzahlElemente; i++)
{
System.out.print(""+sortierendeZahlen[i].getZahl()+" ");
}
}
}
Java:
public class SortierendeZahl {
int _zahl;
boolean IsGerade(){
boolean result = false;
if (_zahl % 2 == 0)
{
result = true;
}
return result;
}
public int getZahl() {
return _zahl;
}
public void setZahl(int zahl) {
_zahl = zahl;
}
}
Und hier nur die I/O Class, hier wird der Bug definitiv nicht sein. ) Nur fürs Protokoll.
Java:
import java.io.*;
public class UserHelper
{
public String getBenutzereingabe(String prompt) {
String eingabeZeile = null;
System.out.print(prompt + " ");
try {
BufferedReader is = new BufferedReader(
new InputStreamReader(System.in));
eingabeZeile = is.readLine();
if (eingabeZeile.length() == 0 ) return null;
}
catch (IOException e)
{
System.out.println("IOEception " + e);
}
return eingabeZeile.toLowerCase();
}
}
Wäre euch wirklich sehr verbunden, wenn ihr mir mal sagen koenntet, wo es da haengt.
P.S.: Verzeiht mir die etwas missglückte Namensgebung an manchen Stellen was sortierendeZahl[] anbelangt.
Zuletzt bearbeitet: