トピック:
各順次時計回りにプリントアウトするために外部から数に応じて、入力行列、
アイデア:
第三のステップはそれぞれ、最下行から第四の工程が印刷され、右から左に線を印刷することである左から右へ、上から下の印刷に1行第二工程、から行を印刷するための最初のステップ:4つのステップに分割印刷円ステップの開始座標と終了は、ラインまたはループによってプリントアウトすることができる座標。
そこ最終ラップのみ1行に退化していない、そして唯一の、または、そのようなプリント円としても、唯一の数は、もはや4つのステップを必要とする場合があります。
印刷の各工程のための前提条件を分析します。最初のステップは、少なくとも1つのステップを中心に印刷することが常に必要です。一行だけならば、それは第二段階ではありません。
第二のステップは、行番号を開始>終了ライン番号の前提条件を印刷します
行番号>開始行番号&&終了列番号>開始列数を終了条件を印刷する第三工程
終了条件は、終了列番号つつ>開始列番号、開始行数よりも印刷ラインの数が少なくとも2である第四工程の終了であります
コード:
パブリック クラス七{ 公共 静的 ボイド printMatrix(int型[] []数字){ IF(番号== NULL ){ リターン; } // 行が開始 整数 X = 0 ; // レコードは、カラム開始 INT Y = 0 。 // 行数が最大である(numbers.length - 1)/ 2 // 列数が最大(番号[0] .LENGTH -1)/ 2 一方、(* 2 X <Yのnumbers.length && * 2 <番号[0 ] .LENGTH){ printMatrixInCircle(数字、X、Y); X ++ 。 Y ++ ; } } パブリック 静的 ボイド printMatrixInCircleは(int型 [] []つき、int型の X、int型、{Y)を INT行= ; numbers.length INT COLS =番号[0 ] .LENGTH; // 出力最上行の ための(をint型 I = Y; I <COLS = - Y - 1; Iは++ ){ System.out.printlnは(番号[X] [I] + "" ); } // 少なくとも2つのループ高さの出力右端の列 // 行- X -1行最下リングの行番号を表す IF X - - (行1>X){ ため(int型 I = X + 1; I <=行- X - 1; I ++は){ System.out.printlnは(番号[I] [COLS - Y -1] + "" ); } } // リングのループ高さと幅は、出力ライン2未満である少なくともまで、少なくとも2 // COLS - 1 - Yは、環の列数と右端の列意味 IF X - - (行1> X && COLS - 1 - Y> {Y) 用の(INT I = COLS - Y - 2; Iは> = Y; - I ){ [行のSystem.out.println(番号。 - 1 - X] [I] + "" )。 } } // リングのリングの高さの幅がカラム左端少なくともその出力される少なくとも2及び3である //1行目の行番号は、最下行の環を表し、 - - X IF(COLS - 1 - Y> Y &&行- 1 - X> X + 1 ){ // 最初と最後の行の左されています出力 用(int型 I =行- 1 - X - 1; I> = X + 1; I - ){ System.out.printlnは(番号[I] [Y] + "" ); } } } パブリック 静的 ボイドメイン(文字列[]引数){ INT [] [] ARR = { { 1,2,3 }、 { 4,5,6 }、 { 7,8,9 } }。 printMatrix(ARR)。 } }