澄清一下,这是一项家庭作业。我只是在寻找建议,我不是在寻找别人为我做功课。
我上半场已经完成了。它使用两个数组来打印Asterisk设计(在这种情况下,字母'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]);
}
}
}
编辑:是的......设计是在空间,其他一切都是星号。
答案 0 :(得分:1)
首先,为什么不使用String[]
或char[][]
?相反,您使用一个简单的数组来放置多行。这会使您的代码混淆和脆弱。
要交换数组,规则通常很简单:获取第一行和最后一行并交换它们。获得第二个和第二个,并交换它们,得到第三个和第三个并交换它们......直到你到达中间。如果您有一个数组,其中每个元素都是一行(如String[]
或char[][]
中),这将更容易。
如果你需要保持一个简单的char[]
的想法,其中每个10-char块都是一行,只需交换每个10-char块,如上所述。
如果您不想更改程序的一般行为,则这是一个有问题的块:
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;
}
}
答案 1 :(得分:1)
你的逆转有点困惑....如果你在两个循环中这样做会更容易。
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;
}
}
答案 2 :(得分:0)
所以..
首先,首先打印'#'
而不是' '
,然后打印'.'
而不是'#'
。你会更清楚地看到发生了什么。
其次,你反而遇到问题,你实际上没有反转任何东西,你计算索引lines - i - 1
的方式是错误的。好方法是(i / 10) * 10 + (10 - (i % 10)) -1
。是的,有点可怕,但如果你想在一行中使用一维数组,就可以了。现在由您来理解它,并将其集成到您的代码中;)