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

Java swap tablica

VPS Starter Arubacloud
0 głosów
1,792 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ź 219 wizyt
pytanie zadane 31 sierpnia 2020 w JavaScript przez nowyklemens Początkujący (430 p.)
0 głosów
3 odpowiedzi 941 wizyt
pytanie zadane 18 marca 2020 w Systemy operacyjne, programy przez lubie internet Użytkownik (780 p.)
+2 głosów
1 odpowiedź 2,009 wizyt

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...