0

表示モードの 1 次元配列を 2 次元文字列配列に分割しようとしていますが、表示モードの並べ替えられた配列を分割するところまで問題が発生しました。私の質問: 既にソートされている単一の配列を 2 次元配列に分割するにはどうすればよいですか? コード (変な変数名について申し訳ありません):

public static String[][] OrganizeDisplayModes (DisplayMode[] modes) {
    int iter = 0;
    int deltaIter = 0;
    int rows = 0;
    int columns = 0;
    String[][] tobe;
    //bubble sorting
    for (int a = 0; a < modes.length - 1; a++) {
        for(int i = 0; i < modes.length - 1; i++) {
            if (modes[i].getWidth() < modes[i+1].getWidth()) {
                DisplayMode change = modes[i];
                modes[i] = modes[i+1];
                modes[i+1] = change;
            }
        }
    }
    for(int i = 0; i < modes.length - 1; i++) {
        if ((modes[i].getWidth() == modes[i+1].getWidth()) && (modes[i].getBitsPerPixel() < modes[i+1].getBitsPerPixel())) {
            DisplayMode change = modes[i];
            modes[i] = modes[i+1];
            modes[i+1] = change;
        }
    }
    for(int i = 0; i < modes.length - 1; i++) {
        if ((modes[i].getWidth() == modes[i+1].getWidth()) && (modes[i].getFrequency() < modes[i+1].getFrequency())) {
            DisplayMode change = modes[i];
            modes[i] = modes[i+1];
            modes[i+1] = change;
        }
    }
    for(int i = 0; i < modes.length; i++) {
        DisplayMode current = modes[i];
        System.out.println(i + ". " + current.getWidth() + "x" + current.getHeight() + "x" + 
                current.getBitsPerPixel() + " " + current.getFrequency() + "Hz");
    }

    //fit into string array
    for (int i = 0; i < modes.length - 1; i++) {
        if (!(modes[i].getWidth() == modes[i+1].getWidth())) {
            rows += 1;
            deltaIter = i - deltaIter;
            if (deltaIter > columns)
            columns = deltaIter;
        }
    }
    //split the displaymode array into the two-dimensional string one here
    tobe = new String[rows][columns];
    for (int i = 0; i < rows; i++) {
        for (int a = 0; a < columns; a++) {
            if((modes[iter].getWidth() == modes[iter+1].getWidth())) {
                tobe[i][a] = iter + ". " + modes[iter].toString() + " ";
            }
            else
                break;
            if (!(iter >= 68))
                iter += 1;
        }
        if (iter >= 68)
            break;
    }
    tobe[rows-1][columns-1] = (iter + 1) + ". " + modes[iter].toString() + " ";
    //test to see that it works
    for (int i = 0; i < rows; i++) {
        for (int a = 0; a < columns; a++) {
            if(tobe[i][a] != null)
                System.out.print(tobe[i][a]);
            else 
                break;
        }
        System.out.println("");
    }
    System.exit(0);
    return null;
}

出力は次のようになります。

0. 1440x900x32 75Hz
1. 1440x900x16 75Hz
2. 1440x900x32 60Hz
3. 1440x900x16 60Hz

さまざまな可能な解像度のすべてで。基本的に、私がやろうとしているのは、さまざまな解像度の読み取り可能なリストを作成して、ユーザーが目的の解像度を選択できるようにすることです。ありがとうございました。

4

1 に答える 1

0

別の方法で情報を保存するのはどうですか。C から Java に移行したとき、私は多次元配列をかなり使用していましたが、それは苦痛です。

public class ScreenType implements Comparable {
    int width;
    int height;
    int color; // not sure what this one was for, assuming 32/16 bit color
    int hertz;

    public ScreenType(int w, int h, int c, int h) {
        width = w;
        height = h;
        color = t;
        hertz = h;
    }

    // remember to maintain transitive property,
    // see JDK documentation for Comparable
    @Override
    public int compareTo(Tuple other) {
    }

    // getters and setters and whatnot

    @Override
    public String toString() {
        return width + "X" + height + "X" + color+ "    " + hertz + "hz";
    }
}

次に、このように画面データを保存し、ScreenTypes の ArrayList を使用します。私の記憶が正しければ、compareTo() のオーバーライドに基づいて並べ替えます

于 2013-05-19T00:03:35.150 に答える