Java图案生成程序调试求助:num3参数逻辑异常导致图案输出不符合预期
Hey there! Let's fix that num3 logic issue you're having. The problem right now is that your current code for num3 is drawing / characters in a diagonal pattern, which isn't matching what you need. Let's break this down and fix it step by step.
What's Wrong with the Original num3 Code?
Your existing num3 loop uses a diagonal check (i+j == num3 -1) to place the /s, which means when num3 is 2, you get two /s in a diagonal instead of the vertical, left-shifting pattern you expect. Also, the extra space logic was causing unnecessary gaps and making the output look the same regardless of num3's value.
Fixed Code
import java.util.Scanner; class Main{ public static void main(String args[]) { Scanner input= new Scanner(System.in); int num1=input.nextInt(); int num2= input.nextInt(); int num3=input.nextInt(); int num4=input.nextInt(); // num1: Fixed to output # without spaces (matches your expected ###) for(int i=0; i<num1; i++) { System.out.print("#"); } // num2: Simplified to print one \ per line with correct indent for(int b=1; b<=num2; b++){ System.out.println(); System.out.print(" ".repeat(num1*2 -1) + "\\"); } // num3: Fixed to print num3 lines of /, each shifted left by 2 spaces for(int i = 0; i < num3; i++){ System.out.println(); // Indent decreases by 2 each line to make / stack leftwards System.out.print(" ".repeat(num1*2 -1 - 2*i) + "/"); } // num4: Print num4 underscores for(int i=0; i<num4; i++) { System.out.print("_"); } } }
Key Fixes Explained
- num1 Adjustment: Your original code printed
#(with a space), which would give# # #instead of###. I removed the space to match your expected output. - num2 Simplification: The inner j loop was unnecessary—we just need one
\per line with the right indent, so I stripped that down to a clean single print per line. - num3 Overhaul:
- Got rid of the inner j loop that was causing diagonal placement
- Changed the indent calculation to
num1*2 -1 - 2*iso each/shifts left by 2 spaces every line (this creates the stacked effect you want) - Removed the confusing space condition that was muddling the output
Test Results
- When you input
3 3 1 2, you'll get:
### \ \ \ / __
- When you input
3 3 2 1, you'll get:
### \ \ \ / / _
That should perfectly match what you were expecting!
内容的提问来源于stack exchange,提问作者Evan
相关产品推荐
相关产品推荐

