[英]I'm trying to understand dynamic arrays, I'm stuck on line 7, this(16); Is reference to the size of the array?
[英]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.