Java 如何将整型数组打印成水平箭头?
具有一个数组,例如Java 如何将整型数组打印成水平箭头?,java,arrays,Java,Arrays,具有一个数组,例如int[]arr=newint[]{9,6,5,2,1,2,6,3,2,7,3,8,1,5,4,7}我想这样打印它: * Output: * 9 * 6 1 * 5 2 2 * 2 6 7 1 * 3 3 5 * 8 4 * 7 * Intermediate Step: * 9 6 5 2 * 1 2 6 3 * 2 7 3 8 * 1 5 4 7 基本上这就是我想要做的。我打算遍历数组,只使用System.out.println()直到我到达“
int[]arr=newint[]{9,6,5,2,1,2,6,3,2,7,3,8,1,5,4,7}代码>我想这样打印它:
* Output:
* 9
* 6 1
* 5 2 2
* 2 6 7 1
* 3 3 5
* 8 4
* 7
* Intermediate Step:
* 9 6 5 2
* 1 2 6 3
* 2 7 3 8
* 1 5 4 7
基本上这就是我想要做的。我打算遍历数组,只使用System.out.println()代码>直到我到达“结束”,这将是7,然后转到下一行,但这不起作用
我也尝试过打印9、6、1等等,但我也无法正常工作,我在这里不知所措,希望您能给我一些指导,告诉我如何才能把这件事想清楚
编辑
我的中间步骤是将数组设置为如下“块”:
* Output:
* 9
* 6 1
* 5 2 2
* 2 6 7 1
* 3 3 5
* 8 4
* 7
* Intermediate Step:
* 9 6 5 2
* 1 2 6 3
* 2 7 3 8
* 1 5 4 7
它应该适用于任何大小的数组。好的,首先:不能为数组的每一个长度打印这样的三角形。例如,假设您拥有该数组,但缺少最后一个条目;那么你的三角形在某个点上会缺少一个元素。事实上,当且仅当元素数为自然数的平方时,才可以打印这样的三角形;在您的示例中,16=4^2。现在,这4也是你最长一行的长度
好的,现在怎么做。如果你看中间的步骤
9 6 5 2
1 2 6 3
2 7 3 8
1 5 4 7
并称之为arr2
,您希望在第一行打印arr2[0][0]
,在第二行打印arr2[1][0]
和arr2[0][1]
,依此类推,直到第4行(当然是初始数组长度的根)。因此,您可以编写一个嵌套循环,这样计算
然后在下一行打印arr2[1][3]
,arr2[2][2]
和arr2[3][1]
,然后打印arr2[2][3]
一个arr2[3][2]
,最后一行就是arr2[3][3]
。这在第二个嵌套循环中最容易实现
当然,我不会给出确切的代码,因为这显然是一项学习任务。但是我会告诉你,如果你有一个计数器I
用于外部循环,一个计数器j
用于内部循环,那么中间数组中的索引将取决于I
和j让我们假设你有二维数组(你可以轻松地将一维更改为二维)
伪代码:
whereToGo = RIGHT;
i = 0;
j = 0;
maxX = WIDTH;
maxY = HEIGHT;
minX = 0;
minY = 0;
while (somethingLeft){
addNumberToPyramid(array[i][j]);
if (whereToGo == RIGHT){
i++;
if (maxX == i) {
whereToGo = DOWN;
minY++;
}
} else if (whereToGo == DOWN){
//Same as if you go RIGHT, but increasing "j", at the end, you decrease maxY and then goLeft
} //... other two directions
}
这就是如何解析输入。将其添加到金字塔的类似方法。我更喜欢创建另一个2D数组,将其直接放在金字塔中,然后编写正确打印此数组的方法:
public class Pyramid{
//initialize minX, maxX etc.
int[][] array;
whereToGo = DOWN;
int i = 0, j = 0;
//initialize array size in constructor
public void addNumberToPyramid(int value){
if (whereToGo == DOWN){
array[i][j] == value;
j++;
if (j == maxY){
whereToGo = UPRIGHT;
maxY -= 2;
} else if (whereToGo == UPRIGHT){
} //... other else if directions
}
}
}
我认为这应该行得通
您迭代了2次。首先是第一行和它下面的所有对角线行,然后是最后一行和它上面的所有对角线行。但是,您必须创建第二个数组来保存此信息。我假设X和Y的阵列大小相同。使用4x4数据(您的数据)测试7x7、4x4等
String[][]array2=新字符串[array.length*2][array.length];
for(int mb=0;mb 对于(int i=0;你能解释一下数组是如何转化为你想要的输出的吗?我在这里根本看不到一个模式。这就是我试图实现的。我将在这里添加一个中间步骤。你是否正确地编写了与样本输入对应的输出?因为在9,6,5,2之后对我来说没有意义。没有工作代码f或者让我来说明我丢失的原因,@libik它可能在我刚才添加的中间步骤之后工作。如果您想保持在同一行中,请使用System.out.println(..)
,或者在使用System.out.println(..)输出前为每行创建字符串
。我明白你的意思了,我的问题是,你如何在打印arr[1]上的6和arr[4]中的1之间移动,然后返回arr[2]中的5.考虑到最后的打印是:…615…啊,我误解了这个问题。无论如何,我已经编辑了我的答案,现在希望它能帮助你解决你的任务。:-)这里有错误,对吗?或者我误解了什么,比如stringp2=array…
应该是array2,因为原来的是1D@LuisArmando这在中间步骤之后起作用:),因此数组是实际创建的中间步骤数组