gpt4 book ai didi

Java 三角形直方图

转载 作者:行者123 更新时间:2023-11-30 06:07:55 24 4
gpt4 key购买 nike

我需要一些项目方面的帮助,我想创建一个 java 程序来创建一种三角形的直方图,它很难解释,所以请看下面的示例

input : 3 1 12 0 7
output:

_
/|\
/ | \
/ | \
/ | \
/ | \ _
/ | \ /|\
/ | \ / | \
/ | \ / | \
_ / | \ / | \
/|\ / | \ / | \
/ | \ _ / | \ / | \
/ | \ /|\ / | \ _ / | \
<=======><===><=========================><=><===============>
| | | | | | | | |

在我的代码中,我已经成功创建了输入部分和底座的生成器,但是三角形/金字塔生成器没有生成正确的空间,任何人都可以帮助我吗?这是我制作三角形的代码(假设输入是数组 numbersnumbers2 中的内容):

public class Spires{
public static void main(String[] args){
int[] numbers = {3,1,12,0,7};
int counter = 6, max = 12;
int[] numbers2 = {3,1,12,0,7};

for(int row = max+1; row >= 0; --row) {
System.out.println();
for(int col = 0; col < counter-1; ++col) {
if(numbers2[col] >= row){
for(int spacesleft = 1; spacesleft < (numbers2[col] + col)+row-1; ++spacesleft){
System.out.print(" ");
}
if(numbers2[col] != row){
System.out.print("/");
for(int c3 = 0; c3 < numbers2[col]-row-1; ++c3) {
System.out.print(" ");
}
System.out.print("|");
for(int c3 = 0; c3 < numbers2[col]-row-1; ++c3) {
System.out.print(" ");
}
System.out.print("\\");

}else{
System.out.print("_");
}
// for(int spacesright = 1; spacesright < numbers2[col] + col + row -1; ++spacesright){
// System.out.print(" ");
// }
}
}
}
System.out.println();
//base generator
for(int i = 0; i<counter-1; ++i) {
System.out.print("<");
for(int i2 = 0; i2 < 2*numbers[i]+1; ++i2) {
System.out.print("=");
}
System.out.print(">");
}
System.out.println();

for(int i = 0; i<counter-1; ++i) {
if(numbers[i] != 0){
System.out.print(" |");
for(int i2 = 0; i2 < 2*numbers[i]-1; ++i2) {
System.out.print(" ");
}
System.out.print("| ");
}else{
System.out.print(" | ");
}
}
}
}

我的输出是这样的:

                        _
/|\
/ | \
/ | \
/ | \
/ | \ _
/ | \ /|\
/ | \ / | \
/ | \ / | \
_ / | \ / | \
/|\ / | \ / | \
/ | \ _ / | \ / | \
/ | \/|\ / | \ _ / | \
<=======><===><=========================><=><===============>
| | | | | | | | |

我需要一些帮助来弄清楚如何添加缺少的空格并删除一些

最佳答案

你就快到了!只需要做一些调整。

  1. 三角形腿左右两侧外部空间数量的计算其实很简单:row + 1。由于每个三角形都是从下向上构建的,因此第 0 行(底行)显示的三角形需要 1 个空格,第 1 行需要 2 个空格,依此类推。
  2. 如果当前位于您显示的三角形列的“上方”,您仍然需要输出空格来标记该三角形的占位符。因此 if (numbers2[col] >= row) 需要相应的 else 来显示空格。

应用这两个更改会得到如下结果:

 if(numbers2[col] >= row){

// corrected calculation \-------/
for(int spacesleft = 0; spacesleft < row + 1; ++spacesleft){
System.out.print(" ");
}

if(numbers2[col] != row){
System.out.print("/");
for(int c3 = 0; c3 < numbers2[col] - row - 1; ++c3) {
System.out.print(" ");
}
System.out.print("|");
for(int c3 = 0; c3 < numbers2[col] - row - 1; ++c3) {
System.out.print(" ");
}
System.out.print("\\");

}else{
System.out.print("_");
}

// corrected calculation \-------/
for(int spacesright = 0; spacesright < row + 1; ++spacesright){
System.out.print(" ");
}

// output spaces to fill area for that column and shift everything over properly
} else {
for (int spaces = 0; spaces < numbers2[col] * 2 + 3; spaces++)
System.out.print(" ");
}

这应该按预期输出直方图。


现在我希望您考虑一下为什么这段代码很难使用。这与您必须同时记住的变量和想法的数量以及阅读和理解一段代码的难度有直接关系。

使此代码更易于推理的一种方法是将其分解为不同的函数,分别处理问题的不同方面。例如,我们可以添加以下方法:

  1. 打印一定数量的空格
  2. 打印一行三角形

此外,它还有助于使用更多具有直观名称的变量,因此您不必在整个计算过程中进行推理。这是一个应该演示的示例:

// output 'count' spaces
public static void printSpaces(int count) {
for (int spaces = 0; spaces < count; spaces++) System.out.print(" ");
}

// output one row of a triangle based on supplied height
// and current display row, starting at 0=top row.
public static void printTriangleSection(int triangleHeight, int rowOfTriangle) {

int triangleWidth = triangleHeight * 2 + 3; // total width taken up by this triangle
int halfWidth = triangleHeight + 1; // total width taken up by one side (excluding the middle)

int spacesOutside = halfWidth - rowOfTriangle; // total spaces outside of triangle hypotenuse
int spacesInside = rowOfTriangle - 1; // total spaces inside triangle hypotenuse

if (rowOfTriangle < 0) { // above the first row of the triangle
printSpaces(triangleWidth);
} else if (rowOfTriangle == 0) {
printSpaces(spacesOutside);
System.out.print("_");
printSpaces(spacesOutside);
} else {
printSpaces(spacesOutside);
System.out.print("/");
printSpaces(spacesInside);
System.out.print("|");
printSpaces(spacesInside);
System.out.print("\\");
printSpaces(spacesOutside);
}
}

然后您的 main 方法的相关部分将简化为:

for(int row = max+1; row >= 0; --row) {
System.out.println();
for(int col = 0; col < counter-1; ++col) {
printTriangleSection(numbers2[col], numbers2[col] - row);
}
}

关于Java 三角形直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40730590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com