Java编程输出错误

代码输出错误
【问题描述】

根据读入的参数绘制不同的图形。

每次有3个图形。

【输入形式】

形状 参数

矩形:R; 符号;参数1:高度; 参数2: 宽度;

等腰直角三角形:T;符号;参数:边长;

菱形:D;符号;参数:边长;

【输出形式】

以符号拼接输出图形

import java.util.Scanner;
public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        char x;
        x=scan.next().charAt(0);
        int height=scan.nextInt();
        int width=scan.nextInt();
        char y;
        y=scan.next().charAt(0);
        int a=scan.nextInt();
        char z;
        z=scan.next().charAt(0);
        int b=scan.nextInt();
        int R=getR(height,width);
        int T=getT(a);
        int D=getD(b);
        scan.close();
    }
    public static int getT(int a){
        for(int m=1;m<=a;m++){
            for(int n=1;n<=m;n++){
                System.out.print("y");
            }
            System.out.print("\n");
        }
        return 0;
    }
    public static int getD(int b){
        for(int p=0;pfor(int q=0;q<=b-1-p;q++){
                System.out.println(" ");
            }
            for(int q=0;q<2*p+1;q++){
                System.out.println("z");
            }
            System.out.println("\n");
        }
        for(int p=0;p-1;p++){
            for(int q=0;q1;q++){
                System.out.println(" ");
            }
            for(int q=0;q<(b-1-p)*2-1;q++){
                System.out.println("$");
            }
            System.out.println("\n");
        }return 0;
    }
    public static int getR(int height,int width){
        for(int i=0;ifor(int j=0;jSystem.out.println("x");
            }
            System.out.println("\n");
        }return 0;
    }
}        


import java.util.Scanner;
public class Main {
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        char x;//接收输入的形状
        int h=0,w=0,a=0,b=0;
        char [] chars=new char[3];
        for(int i=0;i<3;i++){
            x=scan.next().charAt(0);
            if (x == 'R'){
                h=scan.nextInt();
                w=scan.nextInt();
            }else if (x == 'T'){
                a=scan.nextInt();
            }else {
                b=scan.nextInt();
            }
            chars[i]=x;
        }
        for(int i=0;i<3;i++){
            if (chars[i] == 'R'){
               getR(h,w);
            }else if (chars[i] == 'T'){
                getT(a);
            }else {
                getD(b);
            }
        }
        scan.close();
    }
    public static int getT(int a){
        for(int m=1;m<=a;m++){
            for(int n=1;n<=m;n++){
                System.out.print("y");
            }
            System.out.println();
        }
        return 0;
    }
    public static int getD(int b){
        for(int p=0;p<b;p++){
            for(int q=0;q<=b-1-p;q++){
                System.out.print(" ");
            }
            for(int q=0;q<2*p+1;q++){
                System.out.print("z");
            }
            System.out.println();
        }
        for(int p=0;p<b-1;p++){
            for(int q=0;q<p+2;q++){
                System.out.print(" ");
            }
            for(int q=0;q<(b-1-p)*2-1;q++){
                System.out.print("$");
            }
            System.out.println();
        }
        return 0;
    }
    public static int getR(int height,int width){
        for(int i=0;i<height;i++){
            for(int j=0;j<width;j++){
                System.out.print("x");
            }
            System.out.println();
        }
        return 0;
    }
}

参考GPT和自己的思路:这段代码存在一些问题,包括语法和逻辑错误。

1 语法错误
public static void main(String[] args) 方法的前面需要添加类的名称。
scan.close() 应该放在方法的末尾。
在 getT(),getD() 和 getR() 方法中,用于输出的字符应该是变量 y、z 和 x,而不是字符串 "y"、"z" 和 "x"。
在 getD() 方法中,输出空格的语句应该使用 System.out.print 而不是 System.out.println,因为 System.out.println 会在输出后自动换行。
2 逻辑错误
在 getT() 和 getD() 方法中,输出的应该是符号 y、z 和 $,而不是变量名。这可以通过在方法的参数中添加符号变量来解决。
在 getD() 方法中,第二个循环应该输出 z 而不是 $。
以下是修复后的代码:

import java.util.Scanner;

public class Shapes {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        char x = scan.next().charAt(0);
        int height = scan.nextInt();
        int width = scan.nextInt();
        char y = scan.next().charAt(0);
        int a = scan.nextInt();
        char z = scan.next().charAt(0);
        int b = scan.nextInt();
        scan.close();
        
        getR(x, height, width);
        getT(y, a);
        getD(z, b);
    }
    
    public static void getT(char symbol, int a) {
        for (int m = 1; m <= a; m++) {
            for (int n = 1; n <= m; n++) {
                System.out.print(symbol);
            }
            System.out.println();
        }
    }
    
    public static void getD(char symbol, int b) {
        for (int p = 0; p < b; p++) {
            for (int q = 0; q <= b - 1 - p; q++) {
                System.out.print(" ");
            }
            for (int q = 0; q < 2 * p + 1; q++) {
                System.out.print(symbol);
            }
            System.out.println();
        }
        for (int p = 0; p < b - 1; p++) {
            for (int q = 0; q < p + 1; q++) {
                System.out.print(" ");
            }
            for (int q = 0; q < (b - 1 - p) * 2 - 1; q++) {
                System.out.print(symbol);
            }
            System.out.println();
        }
    }
    
    public static void getR(char symbol, int height, int width) {
        for (int i = 0; i < height; i++) {
            for (int j = 0; j < width; j++) {
                System.out.print(symbol);
            }
            System.out.println();
        }
    }
}


参考GPT和自己的思路:

在代码中,存在以下几个问题:

1.方法getR、getT、getD的返回类型应该是void,因为并没有需要返回的值。

2.在方法getT和getD中打印的字符应该是输入的符号y和z,而不是写死的字符。

3.在方法getD中打印空格和菱形时使用的是System.out.println(),应该改为System.out.print()。

4.在方法getR中打印的字符应该是输入的符号x,而不是写死的字符。

5.在方法getD中打印上半部分的菱形时,应该将循环条件改为for(int q=0;q<(b-1-p)*2+1;q++),因为菱形的上半部分宽度比下半部分多1。

修改后的代码如下:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        char x = scan.next().charAt(0);
        int height = scan.nextInt();
        int width = scan.nextInt();
        char y = scan.next().charAt(0);
        int a = scan.nextInt();
        char z = scan.next().charAt(0);
        int b = scan.nextInt();
        getR(x, height, width);
        getT(y, a);
        getD(z, b);
        scan.close();
    }

    public static void getT(char y, int a) {
        for (int m = 1; m <= a; m++) {
            for (int n = 1; n <= m; n++) {
                System.out.print(y);
            }
            System.out.println();
        }
    }

    public static void getD(char z, int b) {
        for (int p = 0; p < b; p++) {
            for (int q = 0; q < b - 1 - p; q++) {
                System.out.print(" ");
            }
            for (int q = 0; q < 2 * p + 1; q++) {
                System.out.print(z);
            }
            System.out.println();
        }
        for (int p = 0; p < b - 1; p++) {
            for (int q = 0; q < p + 1; q++) {
                System.out.print(" ");
            }
            for (int q = 0; q < (b - 1 - p) * 2 + 1; q++) {
                System.out.print(z);
            }
            System.out.println();
        }
    }

    public static void getR(char x, int height, int width) {
        for (int i = 0; i < height; i++) {
            for (int j = 0; j < width; j++) {
                System.out.print(x);
            }
            System.out.println();
        }
    }
}

参考GPT和自己的思路,在这段Java代码中,存在以下问题:

1.main方法没有被声明为public static void,应该在方法前添加修饰符。

2.代码中的System.out.println应该改为System.out.print,因为println会在输出后换行,而在图形拼接时不需要。

3.在getT、getD、getR方法中,打印符号的代码中应该使用传入的符号变量,而不是写死的字符串。因此,应该将打印符号的代码中的双引号改为单引号。

4.在getD方法中,打印空格的代码应该使用System.out.print,而不是System.out.println,因为每次打印空格后不需要换行。

修改后的代码如下所示:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        char x;
        x = scan.next().charAt(0);
        int height = scan.nextInt();
        int width = scan.nextInt();
        char y;
        y = scan.next().charAt(0);
        int a = scan.nextInt();
        char z;
        z = scan.next().charAt(0);
        int b = scan.nextInt();
        int R = getR(height, width, x);
        int T = getT(a, y);
        int D = getD(b, z);
        scan.close();
    }

    public static int getT(int a, char symbol) {
        for (int m = 1; m <= a; m++) {
            for (int n = 1; n <= m; n++) {
                System.out.print(symbol);
            }
            System.out.print("\n");
        }
        return 0;
    }

    public static int getD(int b, char symbol) {
        for (int p = 0; p < b; p++) {
            for (int q = 0; q <= b - 1 - p; q++) {
                System.out.print(" ");
            }
            for (int q = 0; q < 2 * p + 1; q++) {
                System.out.print(symbol);
            }
            System.out.print("\n");
        }
        for (int p = 0; p < b - 1; p++) {
            for (int q = 0; q < p + 1; q++) {
                System.out.print(" ");
            }
            for (int q = 0; q < (b - 1 - p) * 2 - 1; q++) {
                System.out.print(symbol);
            }
            System.out.print("\n");
        }
        return 0;
    }

    public static int getR(int height, int width, char symbol) {
        for (int i = 0; i < height; i++) {
            for (int j = 0; j < width; j++) {
                System.out.print(symbol);
            }
            System.out.print("\n");
        }
        return 0;
    }
}

在修改后的代码中,使用传入的符号变量打印图形,修正了上述问题。
回答不易,还请采纳!!!

该回答引用GPTᴼᴾᴱᴺᴬᴵ
在你的代码中,有一些问题需要修正。首先,你应该在类的主体外定义main方法,以便在方法内调用其他方法。其次,你的方法定义应该是public static int,因为你的方法返回一个整数。第三,你在打印输出时使用了println而不是print,这会导致每个字符都另起一行。最后,你应该检查输入的参数是否符合要求,例如边长是否为正整数。

以下是修正后的代码:

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
char x;
x = scan.next().charAt(0);
int height = scan.nextInt();
int width = scan.nextInt();
char y;
y = scan.next().charAt(0);
int a = scan.nextInt();
char z;
z = scan.next().charAt(0);
int b = scan.nextInt();
scan.close();
int R = getR(height, width, x);
int T = getT(a, y);
int D = getD(b, z);
String result = "";
if (R > 0) {
result += "\n" + getCharSequence(R, width);
}
if (T > 0) {
result += "\n" + getCharSequence(T, 1);
}
if (D > 0) {
result += "\n" + getCharSequence(D, 1);
}
System.out.println(result);
}

public static int getT(int a, char c) {
    for (int m = 1; m <= a; m++) {
        for (int n = 1; n <= m; n++) {
            System.out.print(c);
        }
        System.out.print("\n");
    }
    return a * (a + 1) / 2;
}

public static int getD(int b, char c) {
    if (b % 2 == 0) {
        b++;
    }
    for (int p = 0; p < b; p++) {
        for (int q = 0; q <= b - 1 - p; q++) {
            System.out.print(" ");
        }
        for (int q = 0; q < 2 * p + 1; q++) {
            System.out.print(c);
        }
        System.out.print("\n");
    }
    return b * b;
}

public static int getR(int height, int width, char c) {
    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {
            System.out.print(c);
        }
        System.out.print("\n");
    }
    return height * width;
}

public static String getCharSequence(int length, int count) {
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < length; i++) {
        builder.append(i % count == 0 ? "\n" : "").append((char) ('A' + i % count));
    }
    return builder.toString();
}
}



错的太多了,比如说矩形
应该输出上下行,中间是左右各一个符号,你的代码完全不对啊

参考GPT和自己的思路:

您的代码存在一些问题:

  1. 缺少类声明,需要在代码前面添加类声明,例如:public class DrawShape {

  2. 主函数的声明也有误,需要将其修改为正确的形式,例如:public static void main(String[] args) {

  3. 在方法getT和getD中,输出的字符应该使用形参中的符号变量y和z,而不应该使用字符串常量,例如:System.out.print(y);

  4. 在方法getR中,输出的字符应该使用形参中的符号变量x,而不应该使用字符串常量,例如:System.out.print(x);

  5. 输出符号的语句应该使用System.out.print(),而不是System.out.println(),因为使用println()会自动换行。

  6. 在方法getD中,输出空格的语句应该是System.out.print(),而不是System.out.println(),因为使用println()会每输出空格后自动换行。

下面是修改过的代码:

import java.util.Scanner;

public class DrawShape {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        char x;
        x = scan.next().charAt(0);
        int height = scan.nextInt();
        int width = scan.nextInt();
        char y;
        y = scan.next().charAt(0);
        int a = scan.nextInt();
        char z;
        z = scan.next().charAt(0);
        int b = scan.nextInt();
        int R = getR(height, width, x);
        int T = getT(a, y);
        int D = getD(b, z);
        scan.close();
    }

    public static int getT(int a, char y) {
        for (int m = 1; m <= a; m++) {
            for (int n = 1; n <= m; n++) {
                System.out.print(y);
            }
            System.out.print(" ");
        }
        System.out.println();
        return 0;
    }

    public static int getD(int b, char z) {
        for (int p = 0; p < b; p++) {
            for (int q = 0; q <= b - 1 - p; q++) {
                System.out.print(" ");
            }
            for (int q = 0; q < 2 * p + 1; q++) {
                System.out.print(z);
            }
            System.out.println();
        }
        for (int p = 0; p < b - 1; p++) {
            for (int q = 0; q < p + 1; q++) {
                System.out.print(" ");
            }
            for (int q = 0; q < (b - 1 - p) * 2 - 1; q++) {
                System.out.print(z);
            }
            System.out.println();
        }
        return 0;
    }

    public static int getR(int height, int width, char x) {
        for (int i = 0; i < height; i++) {
            for (int j = 0; j < width; j++) {
                System.out.print(x);
            }
            System.out.println();
        }
        return 0;
    }
}

该回答引用自ChatGPT
解题思路
根据输入的参数,分别绘制不同的图形。
对于矩形,需要使用两层循环,外层循环控制行数,内层循环控制列数,每次输出一个符号即可。
对于等腰直角三角形,需要使用两层循环,外层循环控制行数,内层循环控制列数,每次输出一个符号即可。需要注意的是,第一行输出一个符号,中间行输出一个符号和若干个空格,最后一行输出若干个符号。
对于菱形,需要使用两层循环,外层循环控制行数,内层循环控制列数,每次输出一个符号即可。需要注意的是,第一行输出一个符号,中间行输出一个符号和若干个空格,最后一行输出若干个符号。

参考代码

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String type = scanner.next();
            char symbol = scanner.next().charAt(0);
            int size = scanner.nextInt();
            switch (type) {
                case "R":
                    drawRectangle(symbol, scanner.nextInt(), size);
                    break;
                case "T":
                    drawTriangle(symbol, size);
                    break;
                case "D":
                    drawDiamond(symbol, size);
                    break;
            }
        }
        scanner.close();
    }
    private static void drawRectangle(char symbol, int height, int width) {
        for (int i = 0; i < height; i++) {
            for (int j = 0; j < width; j++) {
                System.out.print(symbol);
            }
            System.out.println();
        }
    }
    private static void drawTriangle(char symbol, int size) {
        for (int i = 0; i < size; i++) {
            for (int j = 0; j <= i; j++) {
                if (i == size - 1 || j == 0 || j == i) {
                    System.out.print(symbol);
                } else {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }
    private static void drawDiamond(char symbol, int size) {
        int half = size / 2;
        int rest = size % 2;
        for (int i = 0; i < size; i++) {
            int space = Math.abs(i - half);
            int count = size - 2 * space;
            for (int j = 0; j < space; j++) {
                System.out.print(" ");
            }
            for (int j = 0; j < count; j++) {
                System.out.print(symbol);
            }
            System.out.println();
        }
    }
}

这段Java代码有几个明显的输出错误:

  1. 输出语句应该使用System.out.print()而不是System.out.println(),否则会在每个字符后面添加一个换行符。
  2. 菱形函数的第二个循环中也应该使用System.out.print()而不是System.out.println(),否则会在每个字符后面添加一个换行符。

下面是修改后的代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        char x;
        x = scan.next().charAt(0);
        int height = scan.nextInt();
        int width = scan.nextInt();
        char y;
        y = scan.next().charAt(0);
        int a = scan.nextInt();
        char z;
        z = scan.next().charAt(0);
        int b = scan.nextInt();
        int R = getR(height, width);
        int T = getT(a);
        int D = getD(b);
        scan.close();
    }

    public static int getT(int a) {
        for (int m = 1; m <= a; m++) {
            for (int n = 1; n <= m; n++) {
                System.out.print("y");
            }
            System.out.print("\n");
        }
        return 0;
    }

    public static int getD(int b) {
        for (int p = 0; p < b; p++) {
            for (int q = 0; q <= b - 1 - p; q++) {
                System.out.print(" ");
            }
            for (int q = 0; q < 2 * p + 1; q++) {
                System.out.print("z");
            }
            System.out.print("\n");
        }
        for (int p = 0; p < b - 1; p++) {
            for (int q = 0; q < p + 1; q++) {
                System.out.print(" ");
            }
            for (int q = 0; q < (b - 1 - p) * 2 - 1; q++) {
                System.out.print("$");
            }
            System.out.print("\n");
        }
        return 0;
    }

    public static int getR(int height, int width) {
        for (int i = 0; i < height; i++) {
            for (int j = 0; j < width; j++) {
                System.out.print("x");
            }
            System.out.print("\n");
        }
        return 0;
    }
}

你的打印图形的代码主要有以下几处错误:
1、System.out.println()本身就是一个换行,所以System.out.println()不要和\n同时使用;
2、打印菱形那里循环的次数设置有问题
已经为你修改好,结果已经正确了,望采纳:
修改后的结果:

img

修改后的代码:


public static void main(String[] args){
            Scanner scan=new Scannehttps://img-mid.csdnimg.cn/release/static/image/mid/ask/320357862976184.png "#left")
r(System.in);
            char x;
            x=scan.next().charAt(0);
            int height=scan.nextInt();
            int width=scan.nextInt();
            char y;
            y=scan.next().charAt(0);
            int a=scan.nextInt();
            char z;
            z=scan.next().charAt(0);
            int b=scan.nextInt();
            int R=getR(height,width);
            int T=getT(a);
            int D=getD(b);
            scan.close();
        }
        public static int getT(int a){
            System.out.println("等腰直角三角形:");
            for(int p=0;p<a;p++){
                for(int q=0;q<=a-1-p;q++){
                    System.out.print(" ");
                }
                for(int q=0;q<2*p+1;q++){
                    System.out.print("y");
                }
                System.out.println();
            }
            return 0;
        }
        public static int getD(int b){
            System.out.println("菱形:");
            for(int p=0;p<b;p++){
                for(int q=0;q<=b-1-p;q++){
                    System.out.print(" ");
                }
                for(int q=0;q<2*p+1;q++){
                    System.out.print("z");
                }
                System.out.println();
            }
            for(int p=0;p<b;p++){
                for(int q=0;q<p+1;q++){
                    System.out.print(" ");
                }
                for(int q=0;q<(b-p)*2-1;q++){
                    System.out.print("$");
                }
                System.out.println();
            }return 0;
        }
        
        public static int getR(int height,int width){
            System.out.println("矩形:");
            for(int i=0;i<height;i++){
                for(int j=0;j<width;j++){
                    System.out.print("x");
                }
                System.out.print("\n");
            }return 0;
        }      

修改前:(你的逻辑)

img

修改后:(修改后的逻辑,仅修改了菱形打印逻辑,第二个遍历时,需要多缩进一个空格)

img

其实逻辑没啥问题,主要的原因在于,对System.out.print(); System.out.println();不熟悉
System.out.print("\n"); 等价于 System.out.println();

代码


import java.util.Scanner;
/**
 * 
 * 改动一:
 * System.out.print() 不换行 System.out.println() 自动换行
 * 逻辑中有手工加换行,所以此处方法,全部换成不带换行的就行,System.out.print()
 * 改动二:
 * 菱形遍历时,多加个缩进
 **/
public class Test {

    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        char x;
        x=scan.next().charAt(0);
        int height=scan.nextInt();
        int width=scan.nextInt();
        char y;
        y=scan.next().charAt(0);
        int a=scan.nextInt();
        char z;
        z=scan.next().charAt(0);
        int b=scan.nextInt();
        int R=getR(height,width);
        int T=getT(a);
        int D=getD(b);
        scan.close();
    }
    public static int getT(int a){
        // 1.此处加了个日志
        System.out.println("等腰直角三角形");
        for(int m=1;m<=a;m++){
            for(int n=1;n<=m;n++){
                System.out.print("y");
            }
            System.out.print("\n");
        }
        return 0;
    }
    public static int getD(int b){
        // 2.此处加了个日志
        System.out.println("菱形");
        for(int p=0;p<b;p++){
            for(int q=0;q<=b-1-p;q++){
                System.out.print(" ");
            }
            for(int q=0;q<2*p+1;q++){
                System.out.print("z");
            }
            System.out.print("\n");
        }
        for(int p=0;p<b-1;p++){
            // 3.此处多加个缩进,p+1修改为p+2
            for(int q=0;q<p+2;q++){
                System.out.print(" ");
            }
            for(int q=0;q<(b-1-p)*2-1;q++){
                System.out.print("$");
            }
            System.out.print("\n");
        }return 0;
    }
    public static int getR(int height,int width){
        // 4.此处加了个日志
        System.out.println("矩形");
        for(int i=0;i<height;i++){
            for(int j=0;j<width;j++){
                System.out.print("x");
            }
            System.out.print("\n");
        }return 0;
    }
}