Java 数字金字塔
Java Number Pyramid
我想创建一个这样的数字金字塔,
7
5 6 5
3 4 5 4 3
1 2 3 4 3 2 1
但我无法创建它。我粘贴了我的代码,它的输出是这样的,
7
5 6 7 6 5
3 4 5 6 7 6 5 4 3
1 2 3 4 5 6 7 6 5 4 3 2 1
我应该怎么做才能解决这个问题?我的代码是完全错误还是稍作改动就足够了?
import java.util.Scanner;
public class App {
public static void main(String[] args){
Scanner myScan = new Scanner(System.in);
System.out.print("Enter mountain width: ");
int width = myScan.nextInt();
System.out.println("Here is your mountain ");
myScan.close();
System.out.println();
for (int i = width; i >= 1; i=i-2)
{
for (int j = 1; j <= i*2; j++)
{
System.out.print(" ");
}
for (int j = i; j <= width; j++)
{
System.out.print(j+" ");
}
for (int j = width-1; j >= i; j--)
{
System.out.print(j+" ");
}
System.out.println();
}
}
}
你可以计算行索引,然后很容易得到数字范围
for (int i = width; i >= 1; i -= 2) {
int row_idx = (width - i) / 2;
for (int j = 1; j <= i; j++) {
System.out.print(" ");
}
for (int j = i; j <= i + row_idx; j++) {
System.out.print(j + " ");
}
for (int j = i - 1 + row_idx; j >= i; j--) {
System.out.print(j + " ");
}
System.out.println();
}
你只要算一下等级就可以了。您可以通过添加额外的计数变量来做到这一点。让我们举个例子:
- 在第 0 级,您只需打印 7 并且计数为 0。
- 在级别 1 上计数为 1。因此您只需要打印 i 的当前值 + 左右计数的数量。但是因为我们在左边多了 1 个,所以右边的值会少一些。
…………
代码会这样继续下去。
查看代码以获得更好的解释:
public static void main( String[] args ) {
Scanner myScan = new Scanner(System.in);
System.out.print("Enter mountain width: ");
int width = myScan.nextInt();
System.out.println("Here is your mountain ");
myScan.close();
System.out.println();
int counter = 0;
for (int i = width; i >= 1; i = i - 2) {
for (int j = 1; j <= i; j++) {
System.out.print(" ");
}
for (int j = i; j <= width - counter; j++) {
System.out.print(j + " ");
}
for (int j = width - 1 - counter; j >= i; j--) {
System.out.print(j + " ");
}
System.out.println();
counter++;
}
}
我只是对您的代码做了一点改动,使其能够正常工作。伙计,干杯!
我想创建一个这样的数字金字塔,
7
5 6 5
3 4 5 4 3
1 2 3 4 3 2 1
但我无法创建它。我粘贴了我的代码,它的输出是这样的,
7
5 6 7 6 5
3 4 5 6 7 6 5 4 3
1 2 3 4 5 6 7 6 5 4 3 2 1
我应该怎么做才能解决这个问题?我的代码是完全错误还是稍作改动就足够了?
import java.util.Scanner;
public class App {
public static void main(String[] args){
Scanner myScan = new Scanner(System.in);
System.out.print("Enter mountain width: ");
int width = myScan.nextInt();
System.out.println("Here is your mountain ");
myScan.close();
System.out.println();
for (int i = width; i >= 1; i=i-2)
{
for (int j = 1; j <= i*2; j++)
{
System.out.print(" ");
}
for (int j = i; j <= width; j++)
{
System.out.print(j+" ");
}
for (int j = width-1; j >= i; j--)
{
System.out.print(j+" ");
}
System.out.println();
}
}
}
你可以计算行索引,然后很容易得到数字范围
for (int i = width; i >= 1; i -= 2) {
int row_idx = (width - i) / 2;
for (int j = 1; j <= i; j++) {
System.out.print(" ");
}
for (int j = i; j <= i + row_idx; j++) {
System.out.print(j + " ");
}
for (int j = i - 1 + row_idx; j >= i; j--) {
System.out.print(j + " ");
}
System.out.println();
}
你只要算一下等级就可以了。您可以通过添加额外的计数变量来做到这一点。让我们举个例子:
- 在第 0 级,您只需打印 7 并且计数为 0。
- 在级别 1 上计数为 1。因此您只需要打印 i 的当前值 + 左右计数的数量。但是因为我们在左边多了 1 个,所以右边的值会少一些。
………… 代码会这样继续下去。
查看代码以获得更好的解释:
public static void main( String[] args ) {
Scanner myScan = new Scanner(System.in);
System.out.print("Enter mountain width: ");
int width = myScan.nextInt();
System.out.println("Here is your mountain ");
myScan.close();
System.out.println();
int counter = 0;
for (int i = width; i >= 1; i = i - 2) {
for (int j = 1; j <= i; j++) {
System.out.print(" ");
}
for (int j = i; j <= width - counter; j++) {
System.out.print(j + " ");
}
for (int j = width - 1 - counter; j >= i; j--) {
System.out.print(j + " ");
}
System.out.println();
counter++;
}
}
我只是对您的代码做了一点改动,使其能够正常工作。伙计,干杯!