2013-02-20 35 views
-2

我知道這可能很簡單,但我似乎無法理解如何垂直寫入整數。例如,有一個帶有4個整數,這是9,21,63,和501,其結果將是一個數組以下垂直寫入數組的整數

 9 2 5 6 
     1 0 3 
      1 

這是我計劃的一小步,也許最簡單的,但我可以「不懂怎麼辦呢:( 有人可以幫我或引導我,讓我可以完成我的計劃

+1

爲什麼文本和示例之間的順序不同? – 2013-02-20 02:06:33

+5

這不一定容易,但應該是可行的,試試看,如果你有麻煩回來這裏 – 2013-02-20 02:06:33

+1

[你有什麼嘗試?](http://mattgemmell.com/2008/12/08/what-have你試過/) – 2013-02-20 02:11:46

回答

1

試試這個僞代碼

int[] list = new int[] {9,21,63,501}; 
bool finished = false; 

if (list.Count > 0) { 

    for (var j=0;!finshed; j++) { 
     finished = true; 

     for (var i = 0; i<list.Count;i++) { 
     String val = list[i].ToString(); 
     if (val.length>j) { 
      write(val.charAt(j)); 
      finished = false; 
     } 
     } 
    } 
} 
+1

這不是僞代碼。 – mre 2013-02-20 02:36:16

1

我創建了一個非常模塊化和易於理解的解決方案。

編輯:將digitAtIndex()轉換爲純粹的數值計算。
保留原文並將其命名爲digitAtStrIndex()

public class IntegerColumns { 

    public IntegerColumns() { 
    int[] arr = new int[] {9, 21, 501, 63}; 
    printColumnMajorOrder(arr); 
    } 

    public static void main(String[] args) { 
    new IntegerColumns(); 
    } 

    // --------------------- Primary Functions -------------------------- 

    // Prints out an Array of Integers, each in a vertical column 
    public void printColumnMajorOrder(int[] arr) { 
    int cols = arr.length; 
    int rows = maxDigits(arr); 
    for (int r = 0; r < rows; r++) { 
     for (int c = 0; c < cols; c++) { 
     int d = digitAtIndex(arr[c], r); 
     System.out.printf("%s\t", d >= 0 ? Integer.toString(d) : " "); 
     } 
     System.out.println(); 
    } 
    } 

    // Returns the length of an Integer 
    public int numDigits(int i) { 
    if (i <= 0) return 0; 
    return (int)Math.floor(Math.log10(i))+1; 
    } 

    // Numeric calculation to find a digit at a specified index 
    public int digitAtIndex(int num, int index) { 
    int digits = numDigits(num); 
    int deg = digits - index - 1; 
    int pow = (int)Math.pow(10, deg); 
    return pow > 0 ? (int)(num/pow)%10 : -1; 
    } 

    // Returns the number of digits for the longest Integer in an Array 
    public int maxDigits(int[] arr) { 
    int max = 0; 
    for (int i : arr) { 
     int size = numDigits(i); 
     if (size > max) max = size; 
    } 
    return max; 
    } 

    // ---------------------- Extra Functions --------------------------- 

    // Hybrid of Integer and Substrings - String manipulation = slow 
    public int digitAtStrIndex(int number, int i) { 
    String n = Integer.toString(number); 
    return n.length() > i ? Integer.parseInt(n.substring(i, i+1)) : -1; 
    } 

    // Prints the digits of a number vertically 
    public void printNumberVertical(int num) { 
    for (int i = 0; i < numDigits(num); i++) 
     System.out.println(digitAtIndex(num, i)); 
    } 
} 
0

`公共類VerticalPrintService {

private int[] data; 

public VerticalPrintService(int[] intArray) { 

    this.data = intArray; 

} 

public void printVertically(){ 
    int cols = data.length; // # of columns 
    int rows = getRows(); // # of rows 

    System.out.println("cols: " + cols); 
    System.out.println("rows: " + rows); 

    String[][] matrix = new String[rows][cols]; 
    int rowIndex = 0; 
    int colIndex = 0; 

    // populate 2d array 
    for (int i : data) { 
     String str = String.valueOf(i); 
     for (int j = 0; j < str.length(); j++) { 
      matrix[rowIndex][colIndex] = String.valueOf(str.charAt(j)); 
      rowIndex++; 
     } 

     colIndex++; 
     rowIndex = 0; 
    } 

    // print 
    for (int i = 0; i < rows; i++) { 
     for (int j = 0; j < cols; j++) { 
      if (null == matrix[i][j]) { 
       System.out.print("\t"); 
      } else { 
       System.out.print(matrix[i][j] + "\t"); 
      } 
     } 
     System.out.println(); 
    } 
} 

private int getRows(){ 

    int max = 0; 
    for (int i : data) { 
     int len = String.valueOf(i).length(); 
     if (len > max) { 
      max = len; 
     } 
    } 

    return max; 
} 

}`

和在主方法

`公共靜態無效的主要(字串[] args){

int[] array = { 9, 53, 501, 90 }; 
VerticalPrintService vps = new VerticalPrintService(array); 
vps.printVertically(); 

}`