この記事では、デジタルマトリックス関数を時計回りまたは反時計回りに出力するJavaの実装について説明します。次のように、参照のために共有してください。
トピック:指定された長さと幅と出力方向に応じて、外側から左上隅までの数値行列を印刷します。次の図
コードとコメントは次のとおりです。
public class numbermatrix {public static void main(string [] args){int width = 25; int height = 12; Boolean ClockWise = false; system.out.println( "wulin.comテスト結果:"); outputmatrix(幅、高さ、時計回り); } /***指定された長さと幅と出力方向に従って、外側から内側まで1つから始まる番号行列を印刷し、マトリックスの開始位置は左上隅にあります。 * * @param width Matrix width * @param height matrix height * @param clockwiseそれが時計回りであるかどうか */ private static void outputmatrix(int width、int height、boolean clockwise){//最初の裁判官数の数字数//出力の形式(最大数桁数 + 1スペース)文字列形式= "%" +(numLength + 1) + "d"; // 2次元配列を出力するように定義します。寸法は高から低いものまでであることに注意してください//この時点で、その中のすべての要素の値は0 int [] [] matrix = new int [height] [width]; //位置ポインターとカウンターを定義し、ポジションポインターが移動し、カウンターが増加の原因となります。増加した数値//はマトリックスに入力されます。幅 *高さ数値が埋められると、このマトリックスが完了します。 //ここでの位置ポインターの最初の要素は、マトリックスの最初の次元yに対応し、2番目の要素は2番目のディメンションxに対応することに注意してください。 int [] pointer = {0、0}; int counter = 1; //運動の現在の方向を定義します:1、2、3、および4は、それぞれ上部、右、下、および左を表します。 //時計回りの開始方向が正しく、反時計回りの開始方向が底にあります。 int方向=時計回り? 2:3; //ループ充填を開始すると、各充填は(int i = 1、max = width * height; i <= max; i ++)の3つのステップです。 int x = pointer [1];マトリックス[y] [x] = counter; // 2。カウンターはカウンター += 1によって増加します。 // 3。次の位置に移動します。この場所はより複雑であるため、方向を実装する方法を開きます(マトリックス、幅、高さ、ポインター、方向、時計回り)。 } //マトリックスが満たされた後、(int y = 0; y <height; y ++){for(int x = 0; x <width; x ++){system.out.printf(format、matrix [y] [x]); } system.out.println(); // 1つの行が完了した後の出力ラインブレイクIf so, turn to * @param width Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix, if so, turn to * @param width Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrixマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマットマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマットマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスマトリックスは、ポインターの現在の方向を移動するかどうかにかかわらず、メソッドが現在の方向に移動するかどうかにかかわらず、メソッドが現在の方向に移動するかどうかにかかわらず、0 * @paramの方向に移動する場合に、この方法を呼び出した後、この方法を呼び出した後、この方法を呼び出します。または元の方向とは異なります)。移動を続けることができない場合は、0 */ private static int move(int [] [] matrix、int width、int height、int [] pointer、int direction、boolean clockwise)を返します{// newPointer int [] newPointer = motirectly(ポインター、方向)に移動してみてください。 // NewPointerが合法かどうかを確認します。合法の場合は、ポインターに割り当て、元の方向を維持します。メソッドは(isvalid(newpointer、matrix、width、height)){System.ArrayCopy(newPointer、0、Pointer、0、2);方向を返す; } //ターンして、新しい方向にポインターから再び移動します=ターン(方向、時計回り)。 newPointer = moveRectly(Pointer、Direction); // newPointerが合法であるかどうかを確認します(以前と同様)is(newPointer、matrix、width、height)){System.ArrayCopy(newPointer、0、Pointer、0、2);方向を返す; } //前進したり曲がることができないので、移動し続けることはできません。 0を返します。 } //マトリックス内の指定された位置をプライベートスタティックブール型isvalid(int [] newpointer、int [] []マトリックス、int width、int height)で満たすことができるかどうかを判断します。{//位置はマトリックス範囲を超えません(newPointer [0]> = height || newPointer [0 || wid] <0 || wid [1] 間違い; } //位置の内容は空である必要があります(matrix [newpointer [0]] [newPointer [1]]!= 0){return false; } trueを返します。 } //ステア。方向の定義によれば、時計回りは+1、反時計回りは-1プライベート静的intターン(int方向、boolean clockwise){int newDirection = clockwise?方向 + 1:方向-1; if(newDirection> 4){newDirection = 1; } else if(newDirection <1){newDirection = 4; } newDirectionを返します。 } / ***指定された方向に移動し、新しい位置に戻ります** @param Pointer Current Position* @param Direction** @return new Position* / private static int [] movedirectly(int [] pointer、int direction){int y = pointer [0]; int x = pointer [1]; switch(方向){ケース1:new int [] {y -1、x}を返す;ケース2:new int [] {y、x + 1}を返します。ケース3:new int [] {y + 1、x}を返します。ケース4:new int [] {y、x -1}を返します。 }新しいIllegalargumentException( "間違った方向:" +方向); }}実行結果:
Javaアルゴリズムの詳細については、このサイトに興味のある読者は、「Javaデータ構造とアルゴリズムのチュートリアル」、「Java操作DOMノードのヒントの要約」、「Javaファイルの要約およびディレクトリ操作のヒント」、「Java Cache操作のヒントの要約」というトピックを見ることができます。
この記事がみんなのJavaプログラミングに役立つことを願っています。