-2

PHPスクリプトをJavaに変換しようとしています。しかし、なぜかうまくいかない..

<?php

$karten = array(12, 10, 8, 14, 9, 11, 13);

for ($i = 1; $i <= count($karten); $i++) {
    print_r($karten);
    echo '<br>';
    if ($karten[$i] > $Karten[$i - 1]) {
        for ($a = 0; $a < count($karten); $a++) {
            if ($karten[$a] > $karten[$i]) {
                //Karten vorne dran setzen
                $karte = $karten[$i];
                unset($karten[$i]);
                array_splice($karten, $a, 0, array($karte));
                break;
            }
        }
    }
}

?>

学校ではEclipseを使用する必要があるため、Javaの最新バージョンではありません。これまでに得たものは次のとおりです。

Main.java:

import java.util.Arrays;


public class Main {

    /**
     * @param args
     */

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        KartenAlgo ka = new KartenAlgo();
        int[] stapel = new int[7];
        int[] sStapel = new int[stapel.length];
        stapel[0] = 12;
        stapel[1] = 10;
        stapel[2] = 8;
        stapel[3] = 14;
        stapel[4] = 9;
        stapel[5] = 11;
        stapel[6] = 13;
        sStapel = ka.sortiereKarten(stapel);
    }

}

アルゴリズム.java:

import java.util.*;

public class KartenAlgo {

    public int[] sortiereKarten(int[] array) {

        int[] returnArr = new int[array.length];

        for (int i = 1; i < array.length; i++) {
            if (array[i] > array[i - 1]) {
                for (int a = 0; a < array.length; a++) {
                    if (array[a] > array[i]) {
                        int karte = array[i];
                        array = this.unset(array, i);
                        array = this.array_insert(array, a, karte);
                        break;
                    }
                }
            }
        }

        return returnArr;
    }

    private int[] unset(int[] array, int index) {
        int[] returnArr = new int[array.length];
        for (int i = 0; i < array.length; i++) {
            if (i != index) {
                if (i < index) {
                    returnArr[i] = array[i];
                } else if (i == array.length - 1) {
                    returnArr[i] = -1;
                } else {
                    returnArr[i] = array[i - 1];
                }
            }
        }

        return returnArr;
    }

    private int[] array_insert(int[] array, int pos, int insert) {
        int[] returnArr = new int[array.length];

        for (int i = 0; i < returnArr.length; i++) {
            if (i < pos) {
                returnArr[i] = array[i];
            } else if (i == pos) {
                returnArr[i] = insert;
            } else {
                returnArr[i] = array[i - 1];
            }
        }

        System.out.println(Arrays.toString(array));

        return returnArr;
    }
}

PHP の unset と array_splice の単純なバリアントを Java で再構築しようとしましたが、うまくいきません。

4

1 に答える 1

0

PHP では、次のように設定を解除します: (配列内の削除/削除要素を設定解除すると、配列が短くなります)

private static int[] unset(int[] arrIn, int index) 
{
    int i;

    // new array is shorter
    int[] arrOut = new int[arrIn.length-1];

    // copy element "before" arrIn[index]
    for(i = 0; i < index ; i++) {
        arrOut[i] = arrIn[i];
    }

    // copy element "after" arrIn[index]
    for(i = index; i < arrOut.length ; i++) {
        arrOut[i] = arrIn[i+1];
    }

    return arrOut;
}

array_insert は要素を配列に挿入し、より長い配列を取得します。

private static int[] array_insert(int[] arrIn, int pos, int value) 
{   
    int i;

    // new array is longer
    int[] arrOut = new int[arrIn.length+1];

    // copy element "before" arrIn[pos]
    for(i = 0; i < pos ; i++) {
        arrOut[i] = arrIn[i];
    }

    // put element in arrOut[pos]
    arrOut[pos] = value;

    // copy element "from" arrIn[pos] "to" end of arrIn[]
    for(i = pos; i < arrIn.length ; i++) {
        arrOut[i+1] = arrIn[i];
    }

    return arrOut;
}
于 2013-06-07T11:06:00.160 に答える