Werte im Array verschieben

kukuk

kukuk

App-Anbieter (kostenlos)
29
Hallo alle zusammen,

ich habe ein kleines Problem und zwar bekomme ich folgendes nicht hin.
ich habe ein Array mit [9] Inhalten
Code:
spieler_kartenwert_integer
dieser int array enthält zahlen von 1 bis 54. Dabei ist der [0] nicht belegt und immer leer.



Ich willl jetzt eine Schiebe Funktion einbauen, wo vorher die SPieler, die schieben möchte dies in einem Dialog bestätigt haben.

Boolean Array [9] (8) Die 0 wird wieder nicht genutzt namens
Code:
spieler_schiebt
. Dieser Wert wird auf True gesetzt wenn z.b Spieler1 & Spieler 2 & Spieler 7 schieben wollen.
Code:
spieler_schiebt[1] = true;
spieler_schiebt[2] = true;
spieler_schiebt[7] = true;

Die Werte sollen dann im Uhrzeiger Sinn verschoben werden.
Das heißt SPieler2 bekommt die Werte von Spieler 1, Spieler 7 von Spieler 2 und Spieler1 von Spieler 7


Hat jemand einen Idee wie ich das realisieren kann?????
 
Ich hab bei mir mal einen kleinen Test gemacht, scheint zu funktionieren.

Aus

wird

So bin ich vorgegangen: (Ist etwas vereinfacht, aber die Grundidee stimmt etwa):
Code:
public int findeNaechstenSchieber() {
  gehe durch array {
    wenn nächsten schieber gefunden {
      return spielerNummer;
    }
  }

  //wenn kein Spieler gefunden -> -1
  return -1;
}

public void schiebeKarten() {
  Gibt es jemanden, der schieben will? {
    solange mehr schieber verfügbar {
      karten vom letzten zum neuen spieler kopieren;
      findeNaechstenSchieber();
    }
  }
}

Wenn du trotzdem nicht weiter kommst, kann ich dann auch meinen kompletten Code zeigen. Aber ich will dir ja erstmal die Chance geben, es selber zu versuchen :tongue:
 
  • Danke
Reaktionen: kukuk
Ich habe mir da jetzt was gecodet, aber irgendwo muss da noch ein Fehler drin sein.

Kann da vielleicht einer mal drüberschauen?

Code:
public void variable_werte_verschieben(){

    
    
    
    for (int x = 1; x < Global.spieler_schiebt.length; x++){
        Global.schieben_werte_zwischenspeichern[x] = Global.spieler_kartenwert_integer[x];    
    }
    
    for (int x = 1; x < Global.spieler_schiebt.length; x++){
        if (Global.spieler_schiebt[x]){
            findenaechstenschieber(x);
            if (kommt_noch_ein_schieber){
                kommt_noch_ein_schieber = false;
            Global.spieler_kartenwert_integer[return_wert] = Global.schieben_werte_zwischenspeichern[x];
            x =return_wert + 1;
            }else{
                Global.spieler_kartenwert_integer[erster_schieber] = Global.schieben_werte_zwischenspeichern[letzter_schieber];
            }
        }
    }
            
            
    
    for (int x = 1; x < Global.spieler_kartenwert_integer.length; x++){
        Global.spieler_kartenwert[x] = String.valueOf(Global.spieler_kartenwert_integer[x]); 
    }        
            


}

public void findenaechstenschieber(int spielernummer){
    for (int x = spielernummer + 1; x < Global.spieler_schiebt.length; x++){
        if (Global.spieler_schiebt[x]){
            letzter_schieber = x;
        schieber_zaehler += 1;
        if (schieber_zaehler == 1){
            erster_schieber = x;
        }
        
            return_wert = x;
        kommt_noch_ein_schieber = true;    
            return;
        
        }
    }
}
 
Warum so kompliziert? Das geht auch mit einer ArrayList (wenn schon kein Queue):

Code:
ArrayList <Integer> list = new ArrayList<Integer>();

list.add(1);list.add(2);list.add(3); //usw.
  
// Beginn      
int helpValue = list.get(0); 
        
list.remove(0); 
list.add(helpValue); 

// fertig
Mit 3 Schritten. ;)

Dafür sind Listen da! Arrays sind unter Java nicht immer die erste Wahl.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: kukuk
Also ich habe das jetzt mal mit deinem Array List durchprobiert in verschiedenen kombinationen, aber der setzt das ja einfach am ende den ersten Eintrag......

Der muss ja aus 1 2 3 4 5 6 7 8
8 1 2 3 4 5 6 7
machen.......


oder auch wenn weniger zahelen sind. z.b. 2 5 8 -> 8 2 5


oder kann man bei der list irgendwie sagen den ersten Eintrag in x ändern?
 
und wo ist das problem

du hast ne arraylist mit x items

dann nimmst item an der stelle x-1 und setzt es auf die stelle 0 - schon ist das von ganz hinten ganz vorne


markus hat dir oben ja sogar schon den code hingetippt - musst nur noch an die richtige stelle kopieren.
 
Oder noch besser guck dir mal die LinkedList an die implementiert Deque
Deque (Java Platform SE 7 )

Eigentlich ziemlich das was du evtl brauchen kannst. ^^
 
  • Danke
Reaktionen: kukuk
Da ich vermute, dass es ohne array nicht geht, das ganze mal verkehrt herum: ;)
Code:
ArrayList <Integer> list = new ArrayList<Integer>();

list.add(1);list.add(2);list.add(3); //usw.
          
// Beginn  
        
int helpValue = list.get(list.size()-1); //letztes Element der liste
                
list.remove(list.size()-1); // entferne letztes Element
list.add(helpValue,0); // füge Element an der erste Stelle ein.

// fertig
Ich denke, du solltest einfach mal ein Javabuch durcharbeiten: z.B. Galileo Computing :: Java ist auch eine Insel - index
Und mit etwas einfacheren als ein Spiel anfangen.
 
  • Danke
Reaktionen: kukuk
Alles klar Leute ich habs endlich hin bekommen. Man was eine Tortur. Eigentlich total einfach aber ich stand total auf dem Schlauch. Jetzt ist die app vom Grundgerüst fertig.

Ich danke euch 1000 mals
 

Ähnliche Themen

R
Antworten
6
Aufrufe
1.014
swa00
swa00
5
Antworten
22
Aufrufe
1.421
590239
5
R
  • RalfKahl
Antworten
10
Aufrufe
301
RalfKahl
R
Zurück
Oben Unten