• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java swap tablica

Object Storage Arubacloud
0 głosów
1,810 wizyt
pytanie zadane 27 października 2016 w Java przez Lukasz95 Bywalec (2,160 p.)

Witam, chcę odwrócić kolejność w tablicy, wydaje mi się że problem jest w metodzie swap() która działa na wartościach albo referencjach, idę dobrym tropem?
Jak to zmienić tak żeby działało?

 


package cw4;

import java.lang.*;

public class Cw4 {
    
    public static void swap(int a,int b){
        int tmp;
        tmp=a;
        a=b;
        b=tmp;
    }
    public static void wyswietl(int [] tab){
           
                for (int x:tab) {
                    System.out.println(x);
                }
    }
    
    public static void zamien(int[] tab){
        int n = tab.length-1;
        int tmp ;
        for(int i=0; i<n;i++)
        {
            swap(tab[i],tab[n-i]);
        }
    }
    
    public static void main(String[] args) {
        System.out.println("Zadanie nr.4");
        int [] tab = {1,2,3,4,5,6};
        zamien(tab);
        wyswietl(tab);
        
    }
    
}

 

2 odpowiedzi

0 głosów
odpowiedź 27 października 2016 przez Aleksander Januszews Gaduła (3,790 p.)
edycja 27 października 2016 przez Aleksander Januszews
Wydaje mi się ,że w Javie nie można zamienić prymitywnych typów (int, char itd.) bo przekazuje ona argumenty przez wartość.
Ja bym stworzył funkcję, która zwraca nową tablicę i wpisał do niej wartości od końca pierwotnej tablicy np:
public static int[] zamien(int[] tab){
        int n = tab.length-1;
        int[] nowatab = new int[n+1];
        for(int i=n,j=0; i>=0;i--,j++){
        	nowatab[j] = tab[i];
        }
        return nowatab;
    }

 

0 głosów
odpowiedź 28 października 2016 przez siof Gaduła (3,560 p.)
Java nie pozwala na swap taki jak robisz w funkcji swap ponieważ typy podstawowe są przekazywane przez wartość. Poza tym jest jeszcze jeden problem w tym algorytmie. W kodzie który zamieściłeś generalnie mógłbyś maksymalnie przesunąć pierwszy element na ostatnie miejsce pod warunkiem że zmieniłbyś warunki w pętli (przy aktualnym wywali się przez wyjście poza zakres już na pierwszym elemencie (próba odwołania się elementu -1 tam będzie).

Problem z swapem można rozwiązać dwojako albo poprzez funkcje swap tak jak masz albo pisząc prawie to samo zamiast wywoływania tej metody. Wymaga to jednak innego podejścia do swapa. Do funkcji musisz przekazać tablicę oraz indexy które chcesz zamienić i w tej funkcji w tablicy po prostu podmieniasz wartości tych indexów w tablicy.

Drugi problem należy rozwiązać przez modyfikacje pętli. To pierwsze sam algorytm można uprościć tak aby zamieniany był 1 element z ostatnim, drugi z przedostatnim i tak dalej. Wtedy też pętla będzie musiała miećwarunek stopu na połowie wielkości tablicy.

 

Mam nadzieje że powyższy opis będzie zrozumiały ;)

Podobne pytania

+1 głos
1 odpowiedź 220 wizyt
pytanie zadane 31 sierpnia 2020 w JavaScript przez nowyklemens Początkujący (430 p.)
0 głosów
3 odpowiedzi 984 wizyt
pytanie zadane 18 marca 2020 w Systemy operacyjne, programy przez lubie internet Użytkownik (780 p.)
+2 głosów
1 odpowiedź 2,043 wizyt

92,538 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,923 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...