hey.. ich lese eine beliebige zahl an ziffern ein und danach soll eine beliebige zahl aus der liste ans ende geschoben werden
zb eingabe:
1 2 3 2 5 6 3 6
zahl 2 soll an das ende:
ausgabe:
1 3 5 6 3 6 2 2
hier mein code:
allerdings geht es nur wenn die zu verschiebene zahl nur 1 mal drin vorkommt…sonst wird die zwar ans ende geschoben aber die letzte ziffer füllt die fehlenden zahlen auf also so:
eingabe:
2 2 3 4 5
zahl 2 soll verschoben werden
ausgabe:
3 4 5 5 2 2
ich weiß nicht woran das liegt..jemand ne idee?
zb eingabe:
1 2 3 2 5 6 3 6
zahl 2 soll an das ende:
ausgabe:
1 3 5 6 3 6 2 2
hier mein code:
Java:
class Element {
int wert;
Element naechstes;
Element(int v, Element n) {
this.wert = v;
this.naechstes = n;
}
}
class Liste {
Element erstes, letztes;
Liste() {
this.erstes = null;
this.letztes = null;
}
void hinzufuegen(int i) { // Anhaengen am Ende
Element elem = new Element(i, null);
if (this.erstes == null) {
this.erstes = elem;
this.letztes = elem;
} else {
this.letztes.naechstes = elem;
this.letztes = elem;
}
}
}
class Eliste extends Liste {
Eliste() {
super();
}
void ansEndeSchieben(int i) {
Element aktuell = this.erstes;
int counter = 0;
// durchlauft die liste
while (aktuell != null) {
// guckt ob der wert anders als i ist
if (aktuell.wert != i) {
aktuell = aktuell.naechstes;
} else {
counter++;
if (aktuell.naechstes == null || this.letztes == aktuell) {
break;
}
while (aktuell != this.letztes) {
if (aktuell.naechstes == this.letztes) {
aktuell.wert = aktuell.naechstes.wert;
aktuell = aktuell.naechstes;
}else{
aktuell.wert = aktuell.naechstes.wert;
aktuell = aktuell.naechstes;
}
}
aktuell = this.erstes;
}
}
aktuell = this.erstes;
while (aktuell.naechstes != this.letztes) {
aktuell = aktuell.naechstes;
}
this.letztes = aktuell;
aktuell.naechstes = null;
for (int a = 0; a < counter; a++) {
hinzufuegen(i);
}
}
void ausgabe() { // zusaetzlich - muss nicht implementiert werden
Element aktuell = this.erstes;
while (aktuell != null) {
IO.print(aktuell.wert + " ");
aktuell = aktuell.naechstes;
}
}
}
public class aufgabe2 {
/**
* @param args
*/
public static void main(String[] args) {
int max = IO.readInt("MaxEintraege: ");
Eliste neu = new Eliste();
while (max > 0) {
int zahl = IO.readInt("Zahl eingeben: ");
neu.hinzufuegen(zahl);
max--;
}
IO.println("Unsortiert: ");
neu.ausgabe();
IO.println();
IO.println("----------------------\nSortiert: ");
int sortierZahl = IO.readInt("Zahl die an das Ende soll: ");
neu.ansEndeSchieben(sortierZahl);
neu.ausgabe();
}
}
allerdings geht es nur wenn die zu verschiebene zahl nur 1 mal drin vorkommt…sonst wird die zwar ans ende geschoben aber die letzte ziffer füllt die fehlenden zahlen auf also so:
eingabe:
2 2 3 4 5
zahl 2 soll verschoben werden
ausgabe:
3 4 5 5 2 2
ich weiß nicht woran das liegt..jemand ne idee?
Zuletzt bearbeitet von einem Moderator: