Kuinka tämä koodi(kupla) muutetaan kaksi ja kolmiulotteisen taulukon kanssa toimivaksi?
class Kupla
{
public static void main(String args[])
{
int nums[] = { 99, -10, 100123, 18, -978, 5623, 463, -9, 287, 49 };
int a, b, t;
int koko;
koko = 10; // lajiteltavien alkioiden määrä
for(a=1; a < koko; a )
for(b=koko-1; b >= a; b--)
{
if(nums[b-1] > nums[b])
{
// jos epäjärjestyksessävaihdetaan alkiot
t = nums[b-1];
nums[b-1] = nums[b];
nums[b] = t;
}}}}
class Kupla
{
public static void main(String args[])
{
int nums[] = { 99, -10, 100123, 18, -978, 5623, 463, -9, 287, 49 };
int a, b, t;
int koko;
koko = 10; // lajiteltavien alkioiden määrä
for(a=1; a < koko; a )
for(b=koko-1; b >= a; b--)
{
if(nums[b-1] > nums[b])
{
// jos epäjärjestyksessävaihdetaan alkiot
t = nums[b-1];
nums[b-1] = nums[b];
nums[b] = t;
}}}}
Vastaukset 5
Vanhimmat
Tekisin sen alla olevalla tavalla joka on erittäin "brutaali". Koodissa oleva "lajittele" metodi pystyy käsittelemään kaikenulotteisia int taulukoita.
--- ESIMERKKI ALKAA ---
public class Kuplako {
public static void lajittele(Object object) {
if (object.getClass().getName().equals("[I")) {
int[] nums = (int[]) object;
int temp, koko = nums.length;
for(int a = 1; a < koko; a )
for(int b= koko-1; b >= a; b--)
if(nums[b-1] > nums[b]) {
temp = nums[b-1];
nums[b-1] = nums[b];
nums[b] = temp;
}
} else {
Object[] array = (Object[]) object;
for (int i = 0; i < array.length; i )
lajittele((Object) array[i]);
}
}
public static void main(String[] args) {
int taulukko[][][][] =
{ { { { 4, 3 }, { 1, -1 } }, { { 3, -3 }, { 3, 0 } } } };
lajittele(taulukko);
}
}
--- ESIMERKKI LOPPUU ---
heittona...
if (object.getClass().getName().equals("[I")) ...
vs.
if (object.getClass() == int[].class)...
Kiitos vinkistä.
Luulisi että tuon koko metodin voisi tehdä Java 5:lla jotenkin sivistyneemmin/toisin, mutten ole keksinyt vielä miten. Tai sitten Java on vain sen verran rajoittunut tämän tyyppisissä jutuissa, ettei sitä pysty tekemään juurikaan toisin.
Perinteinen toteutus tapa on yleensä (kai) alla olevan kaltainen. Toteutetaan siis joka ulottuvuudelle oma metodi. Haitko tällaista?
--- ESIMERKKI ALKAA ---
public class UusiKupla {
public static void lajittele(int[] nums) {
int t, koko = nums.length;
for(int a=1; a < koko; a )
for(int b=koko-1; b >= a; b--)
if(nums[b-1] > nums[b]) {
t = nums[b-1];
nums[b-1] = nums[b];
nums[b] = t;
}
}
public static void lajittele(int[][] nums) {
for (int i = 0; i < nums.length; i )
lajittele(nums[i]);
}
public static void lajittele(int[][][] nums) {
for (int i = 0; i < nums.length; i )
lajittele(nums[i]);
}
public static void main(String[] args) {
int nums[][][] =
{ { { 3, 1, 9 }, { 7, 4, 2 }, { 0, -2, 2} } };
lajittele(nums);
}
}
--- ESIMERKKI LOPPUU ---