Array bei index halbe umdrehen ohne hilfsfeld

siemaa08

Mitglied
Hallo Leute, ich habe folgende Aufgabenstellung von meinem Lehrer erhalten:

Vertausche in einem Feld mit 10 Elementen die 1. fünf mit den 2. 5 Zahlen.
z.B: aus 15,76,22,33,44,1,2,3,4,5
wird 1,2,3,4,5,15,76,22,33,44
a) mit zusätzlichem Feld.
b) Ohne zusätzlichem Feld


a ist kein Problem und war auch ganz schnell gelöst :

Java:
for(int i = 0; i<help.length;i++)
        {
            help[i] = feld[helpc];
            if(helpc == 9)
            {
                helpc=0;
            }
            else
            helpc++;
            
            System.out.println(help[i]);
        }


aber ohne einem zweiten Feld komm ich nicht drauf wie ich das machen soll.

mein Code:


Java:
 for(int i = 0,j=5;i<feld.length;i++,j++)
        {
           feld[i] = feld[j];
            
            
            if(j ==9)
            {
                j=0;
                
            }
            System.out.println(feld[i]);
        }


mir ist klar das ich das Feld überschreibe und somit wieder die gleichen Werte bekomme, aber ich hab Keine Ahnung wie das anders geht. Ich habe es mit array.clone() probiert, allerdings habe ich keine Ahnugn wie ich das dann angehen soll.

Ich bitte euch um Hilfe 😉
 
Zuletzt bearbeitet von einem Moderator:
vllt hilft dir folgender Gedankenstoß:
Java:
int a = 20;
int b = 8;
a = a+b; //28
b = a-b; //20
a = a-b; //8
Genau so kannst du es auch mit dem Array machen, nur dass du nicht a und b hast, sondern deine Werte aus dem Array.
 
(mal angenommen es sind immer 10 Werte im Array)
Du brauchst eine Schleife mit i=0..4 und tauscht den Wert feld mit feld[5+i]
 
du meinst:


feld = feld[5+i];

ja ok, dann gibt es mir den hinteren block vorne hin, soweit bin ich schon gekommen, aber den vorderen block überschreibt es mir ja dann oder?

ich hab echt keinen plan wie ich den vertauschen kann.

Ich komm leider nicht drauf.

Dein denkanstoß hat mir zwar geholfen, aber drauf kommen du ich leider trotzdem nicht.

wenn ich das ganze ausgabe kommt.

1,2,3,4,5,0,0,0,0,0
 
Guck doch was ich mit a und b gemacht habe. Ist doch genau das gleiche, nur dass du statt a und b dein feld und feld[5+i] nimmst :bahnhof:
 
Java:
for(int i = 0;i<feld.length-1;i++)
        {
          // feld[i] = feld[i] + feld[j];
          
      
            if(i>4)
            {
                feld[i] =  feld[0+i];
            }
            else
             feld[i] =  feld[5+i];
             
            System.out.println(feld[i]);
        }


Ich weiß, für dich ist das einfach, aber ich steh hier irgendwie voll auf der Leitung.

Ich weiß zwar was du mit a und b meinst, aber iwie hab ich dann doch wieder keine ahnung :shock:
 
Zuletzt bearbeitet von einem Moderator:
Ich weiß nicht so ganz wo dein Problem liegt. Du hast den Code, wo du nur statt
Code:
a
>
Code:
feld[i]
schreiben musst und statt
Code:
b
>
Code:
feld[5+i]
. Das kann sogar jeder beliebiger Texteditor mit der Funktion "suchen/ersetzen" automatisch machen...

P.S. Und beachte, was in Rot über dem Eingabefeld steht bezüglich Java-Tags.
 
Java:
for(int i = 0;i<feld.length;i++)
        {
          
             feld[i] = feld[i] + feld[5+i] ;
             feld[5+i] =  feld[i] - feld[5+i];
             feld[i] = feld[i] - feld[5+i];
             
            System.out.println(feld[i]);
        }

??

Ich glaub ich geb mir hier gleich die Kugel -.-

um diese Uhrzeit bin ich jawohl noch richtig zu gebrauchen^^

ich hab jetzt edliche Programme geschrieben die viel "schwieriger" sind... und bei so einem Feldbeispiel steig ich aus. peinlich 😉

ich wollte das noch fertig machen, hab aber echt 0 dau wieso das nicht hinhaut, wenn ich das ganze nicht brauchen würde würde ich dich (euch) gar nicht solange nerven -.-

ich weiß das ich nur ersetzen muss aber... siehe code.
 
Könntest ja schon die Ratschläge annehmen:
(mal angenommen es sind immer 10 Werte im Array)
Du brauchst eine Schleife mit i=0..4 und tauscht den Wert feld mit feld[5+i]


Außerdem vermute ich mal, dass bei dir ArrayIndexOutOfBounds-Exception fliegt. Solche Informationen sind schon ziemlich hilfreich und die sollte man auch erwähnen.
 
Java:
for(int i = 0;i<5;i++)
        {
          
             feld[i] = feld[i] + feld[5+i] ;
             feld[5+i] =  feld[i] - feld[5+i];
             feld[i] = feld[i] - feld[5+i];
             
            System.out.println(feld[i]+" "+feld[5+i]);
            
        }


Danke 😉

jetzt hab ich endlich geschnallt was du meinst 😉

ich hätte wohl nicht solange weiterprogrammieren sollen sondern schlafen und dann wieder denken 😉


danke!
 
vllt hilft dir folgender Gedankenstoß:
Java:
int a = 20;
int b = 8;
a = a+b; //28
b = a-b; //20
a = a-b; //8

Gibt das nicht Probleme mit negativen Werten? Was spricht gegen den normalen "Dreieckstausch" mit einer temporären Variable? Anders wird man zwei Werte nicht miteinander austauschen können, das geht IMHO nur über einen zusätzlichen Platz, es sei denn man verwendet z.B. den XOR-Tausch aber das ist naja...

EDIT: Ah...hatte mich verschaut, scheint zu klappen. 🙂 Nichtsdestotrotz würde ich allein aus Geschwindigkeitsgründen eine temporäre Variable vorziehen.
 
Zuletzt bearbeitet:
>z.B. den XOR-Tausch aber das ist naja...

Würde dabei auch an den klassischen tausch denken, als speicher noch rar war.
Java:
int x = 20;
int y = 8;
x ^= y;
y ^= x;
x ^= y;
 

Zurück
Oben