簡體   English   中英

我正在嘗試逐行反轉數組

[英]I'm trying to reverse an array line by line

澄清一下,這是一項家庭作業。 我只是在尋找建議,我不是在尋找有人替我做作業。

我已經完成了上半年。 它使用兩個數組來打印一個星號設計(在本例中為字母“ S”。這很好用。然后,我跳過了兩行並打印了該設計,但翻轉了(所以每行都被顛倒了)。似乎工作正常,但是當我運行該程序時,它會打印兩個S,而第二個則不會反轉。

public class Design {
   public static void main (String [] args) {
       char [] array = new char [150];
       for (int index = 0; index < array.length; index ++) 
       {
         array [index] = '#';
       }
       int [] indexNumbers = {
           0,1,2,3,4,5,6,7,8,9,10,20,30,40,50,
           60,70,71,72,73,74,75,76,77,78,79,89,99,109,119,129,139,140,
           141,142,143,144,145,146,147,148,149
       };
       for (int i = 0; i < indexNumbers.length; i++) 
       {
         array [indexNumbers[i]] = ' ';
       }
      for (int index = 0; index < array.length; index ++)
      {
         if (index % 10 == 0 && index > 0) 
         System.out.println();
         System.out.print (array[index]);
      }

      //Now, to reverse the letter

      System.out.println();
      System.out.println();

      int lines = 5;
      for (int i = 0; i< array.length; i++){
        if (i >= lines)
          lines += 10;
        char temp = array [i];
        array [i] = array [lines - i - 1];
        array [lines - i - 1] = temp;
      }
      for (int index = 0; index < array.length; index ++)
      {
        if (index % 10 == 0 && index > 0) 
          System.out.println();
          System.out.print (array[index]);
      }
    }
  }

編輯:是的...設計是在空間中,其他所有內容都是星號。

首先,為什么不使用String[]char[][] 相反,您使用一個簡單的數組在其中放置多行。 這使您的代碼變得混亂和脆弱。

要交換數組,規則通常很簡單:獲取第一行和最后一行並交換它們。 獲得倒數第二個和第二個,並交換它們,獲得倒數第三個和第三個並交換它們...直到到達中間。 如果您有一個數組,其中每個元素都是一條線(例如在String[]char[][] ),這將容易得多。

如果您需要保留一個簡單的char[]的想法,其中每個10個字符的塊都是一行,那么就像我上面所述,只需交換每個10個字符的塊即可。

如果您不想更改程序的一般行為,這是有問題的塊:

  int lines = 5;
  for (int i = 0; i< array.length; i++){
     if (i >= lines)
        lines += 10;
    char temp = array [i];
    array [i] = array [lines - i - 1];
    array [lines - i - 1] = temp;
  }

您不是在這里交換行,而是在交換字符。 這樣,您的if不是檢查和跳過行,而是檢查和跳過字符。

這個更好:

  int lines = array.length / 10;
  for (int i = 0; i<= lines / 2; i++){
      for (int j = 0; j < 10; j++) {
          char t = array[i * 10 + j];
          array[i * 10 + j] = array[(lines - i - 1) * 10 + j];
          array[(lines - i - 1) * 10 + j] = t;
      }
  }

您的換向有點混亂。。。如果在兩個循環中進行,則更容易。

for (int row = 0; row < (array.Length / 10); row++)
{
    for (int col = 0; col < 5; col++)
    {
        int rowStart = row * 10;
        int rowEnd = rowStart + 9;
        char temp = array[rowStart + col];                    
        array[rowStart + col] = array[rowEnd - col];
        array[rowEnd - col] = temp;
    }
}

所以..

首先,首先打印'#'而不是' ''.' 而不是'#' 您將更清楚地看到發生了什么。

其次,您有一個相反的問題,實際上您沒有反轉任何東西,這是您計算索引lines - i - 1的方式lines - i - 1是錯誤的。 好的方法是(i / 10) * 10 + (10 - (i % 10)) -1 是的,這有點可怕,但是如果您想在一維中使用一維數組,就可以了。 現在由您來了解它,並將其集成到您的代碼中;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM