我必须编写一个代码,打印出一个三角形,最后一行的长度是输入数字。同样,空白处也必须填充点。
此外,代码必须运行直到输入的数字不均匀为止。
可悲的是,我的代码不会打印出点或其他星星,而只会打印出最后一行。
有人可以看看它并给我一些提示吗?
任何帮助表示赞赏。预先非常感谢。
代码如下:
import java.util.Scanner;
public class Triangle_new {
//Main-Method with Input-Check
public static void main(String[] args) {
System.out.println("Type in a number to get the triangle:");
Scanner sc = new Scanner(System.in);
int length = sc.nextInt();
if(length < 0 || length%2 == 0) {
System.out.println("Please type in a uneven number or zero to quit. ");
Triangle_Test.check_input(length);
}else{
display_triangle(length);
}
}
//DisplayTriangle-Method
public static void display_triangle(int length) {
int lines = (length+1)/2;
//Height of the Triangle
get_lines(length);
//Dotfiller Left Side
if(lines > 0){
get_dotsleft(lines, length);
}
//Stars-Output
if(lines > 0) {
get_stars(lines);
}
//Dotfiller Right Side
if(lines > 0) {
get_dotsright(lines, length);
}
}
//Constructors for Triangle
public static void get_lines(int length) {
for(int lines = 1; lines <= (length + 1) / 2; lines++){
System.out.println();
}
}
public static void get_dotsleft(int lines, int length){
for(int leftfiller = 1; leftfiller <= ((length + 1) / 2) - lines; leftfiller++) {
System.out.print(".");
}
}
public static void get_stars(int lines) {
for(int stars = 1; stars <= (2 * lines) - 1; stars++) {
System.out.print("*");
}
}
public static void get_dotsright(int lines, int length){
for(int rightfiller = 1; rightfiller <= ((length+1) / 2) - lines; rightfiller++) {
System.out.print(".");
}
}
}
//Triangle_Test Class with Input-Check Method
class Triangle_Test extends Triangle_new {
public static void check_input(int length) {
//Check Input until Input is uneven number
Scanner sc = new Scanner(System.in);
do {
length = sc.nextInt();
if(length%2 == 0 && length != 0) {
System.out.println("Invalid input. Try again.");
}
if(length%2 != 0 && length > 0) {
}
//Triangle Output
if(length%2 != 0){
Triangle_new.display_triangle(length);
}
if(length == 0) {
System.out.println(" -> Zero detected. Program will be shutdown.");
}
}while(length%2 != 0 || length != 0);
}
}
答案 0 :(得分:0)
您的get_lines()
方法听起来像应该返回三角形将要填充的行数(也基于您的注释),但是它的作用是打印空行。
尝试不使用它。
答案 1 :(得分:0)
按如下所示更改display_triange函数:
public static void displayTriangle(int length) {
String stars = "*";
for (int i =0 ; i< ((length+1) /2); i++){
String dots = "";
for (int j = 0; j < (length - i * 2) / 2; j++) {
dots += ".";
}
System.out.println(dots+stars+dots);
stars +="**";
}
}
让我解释一下为什么您的解决方案不起作用:
这就是我对问题的思考,因此提出了解决方案。
答案 2 :(得分:0)
这是您的代码中的问题:
get_lines只是在for循环中打印一些新行,而我们只需要在每个星/点组合之后仅换一行即可。换句话说,新行的数量不变。每行总是一个。
get_dotsLeft和get_dotsRight实际上是相同的。它们应仅合并为一个功能。
循环打印点和星的限制不正确。我修复了它们。
按照惯例,命名函数时最好遵循驼峰命名法,即get_lines应该是getLines。
您的所有get_函数都应该是私有的。它们只能在您的班级中访问,不应暴露给其他班级。 (这不会引发错误,但是将这些功能公开是一个不好的设计。)
public static void display_triangle(int length) {
int lines = (length+1)/2;
for (int i =1 ; i<= lines ;i++) {
//Height of the Triangle
get_lines(length);
get_dotsleft(lines-i);
get_stars(i);
get_dotsright(lines-i);
}
}
//Constructors for Triangle
private static void get_lines(int length) {
System.out.println("");
}
private static void get_dotsleft(int lines){
for(int leftfiller = 1; leftfiller <= lines; leftfiller++) {
System.out.print(".");
}
}
private static void get_stars(int lines) {
for(int stars = 1; stars <= (2 * lines) - 1; stars++) {
System.out.print("*");
}
}
private static void get_dotsright(int lines){
for(int rightfiller = 1; rightfiller <= lines; rightfiller++) {
System.out.print(".");
}
}