代码输出错误
【问题描述】
根据读入的参数绘制不同的图形。
每次有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和自己的思路:
您的代码存在一些问题:
缺少类声明,需要在代码前面添加类声明,例如:public class DrawShape {
主函数的声明也有误,需要将其修改为正确的形式,例如:public static void main(String[] args) {
在方法getT和getD中,输出的字符应该使用形参中的符号变量y和z,而不应该使用字符串常量,例如:System.out.print(y);
在方法getR中,输出的字符应该使用形参中的符号变量x,而不应该使用字符串常量,例如:System.out.print(x);
输出符号的语句应该使用System.out.print(),而不是System.out.println(),因为使用println()会自动换行。
在方法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代码有几个明显的输出错误:
System.out.print()
而不是System.out.println()
,否则会在每个字符后面添加一个换行符。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、打印菱形那里循环的次数设置有问题
已经为你修改好,结果已经正确了,望采纳:
修改后的结果:
修改后的代码:
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;
}
修改前:(你的逻辑)
修改后:(修改后的逻辑,仅修改了菱形打印逻辑,第二个遍历时,需要多缩进一个空格)
其实逻辑没啥问题,主要的原因在于,对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;
}
}