这是一个家庭作业问题所以我想要帮助,而不是答案。
我正在尝试根据用户输入的数字从数字中创建2个三角形。
"Enter a number between 2-9: "3"
1
12
123
1
21
321
IE2:
"Enter a number between 2-9: "5"
1
12
123
1234
12345
1
21
321
4321
54321
我已经能够完成第一个三角形。但是当我添加我的嵌套循环时,它会弄乱我的第一个三角形,其中包含从嵌套循环中生成的数字。它还将所有数字放在一条直线上。我尝试了不同的嵌套循环的变体,甚至尝试弄乱StringBuilder
,但仍然不成功。
这是我到目前为止在代码中所拥有的:
import java.util.Scanner;
public class NestedLoops
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.print("Enter a Number between 2-9: ");
int width = input.nextInt();
String r = "";
for (int i = 1; i <= width; i++)
{
r = r + i;
System.out.println(r);
}
}
}
同样,我正在寻求帮助/理解而不仅仅是答案。
答案 0 :(得分:1)
问题的第二部分有两个方面。
您需要以相反的顺序生成带有数字的字符串:
您需要安排左侧有空格。
或者,您可以在字符数组或字符串构建器中构建字符串,而不是使用字符串连接。
“技巧”是在开始削减代码之前弄清楚你要使用什么策略。
答案 1 :(得分:0)
您需要使用队列。 例如。 http://docs.oracle.com/javase/1.5.0/docs/api/java/util/LinkedList.html
将数字包括在内,直到达到最大值,然后开始对它们进行解除。
当你出队时,你需要应用反向
Queue<String> q = new LinkedList<String>();
for (int i = 1; i <= width; i++)
{
r = r + i;
q.add(r);
System.out.println(r);
}
while(!q.isEmpty()){
String j = q.remove();
//reverse j
System.out.println(reverse(j));
}
我离开倒车部分让你做:)
答案 2 :(得分:0)
你可以在第一次循环之后添加另一个循环,如
String r = "";
String space = "";
for (int i = width; i >= 1; i--)
{
r = r + i;
System.out.println(r);
}
试试吧。尚未测试
答案 3 :(得分:0)
试
int width = 5;
// for all lines; number of lines = width
for (int line = 1; line <= width; line++) {
// print numbers from 1 to current line number
for (int n = 1; n <= line; n++) {
System.out.print(n);
}
// end of line
System.out.println();
}
// add empty line between triangles
System.out.println();
// for all lines; number of lines = width
for (int line = 1; line <= width; line++) {
// printing padding spaces, number of spaces = with - line number
int nSpaces = width - line;
for (int i = 0; i < nSpaces; i++) {
System.out.print(" ");
}
// print numbers from number of current line to 1
for (int n = line; n >= 1; n--) {
System.out.print(n);
}
// end of line
System.out.println();
}
答案 4 :(得分:0)
public static void main(String[] args)
{
int n = 5;
for(int i=1; i<=n; i++)
{
for (int j=(n*2), k=n; j>1; j--)
{
if (k <= i)
{
System.out.print(k);
}
else
{
System.out.print('*');
}
k += (j)-1 > n ? -1 : 1;
}
System.out.println();
}
}
答案 5 :(得分:0)
刚尝试在scala中实现。如果你不喜欢它,请忽略.. :-)
class Triangle extends App
{
val width = Console.readInt()
if (width < 2 || width > 9)
{
throw new RuntimeException()
}
var i, j = 1;
for (i <- 1 to width)
{
for (j <- 1 to i)
{
print(j)
}
print("\n")
}
for (i <- 1 to width)
{
for (dummy <- 1 to width-i)
{
print(" ")
}
for (j <- i to 1 by -1)
{
print(j)
}
print("\n")
}
}