我需要将一个字符串(最多 10 个字符)打印为菱形。
好吧,我现在尝试了将近 2-3 个小时来解决它,但我仍然遇到很多问题。
这是代码:它适用于输出“a”、“abc”、“abcde”。这意味着仅适用于长度为 1、3、5 的字符串。而且,它只打印钻石的前半部分。
非常感谢任何帮助。
导入java.util.Scanner;
public class MyFirstClass1
{
public static void main(String[] args)
{
int halfSize;
int p = 0;
String message;
System.out.println("Please enter a string: ");
Scanner input = new Scanner(System.in);
message = input.nextLine();
//System.out.println((int)Math.ceil(message.length() / 2) + 1);
halfSize = message.length() / 2;
for (int i = 1; i <= message.length(); i++) {
//Print spaces
for (int k = 0; k < halfSize; k++)
System.out.print(" ");
halfSize--;
System.out.print("\n");
if((int)Math.ceil((float)message.length() / 2) + 1 >= p)
{
for (int j = 0; j < p + 1; j++)
System.out.print(message.charAt(j));
}
p+=2;
}
}
}
最佳答案
下面应该有帮助
int halfSize;
int p = 0;
boolean is_bottom;
String message;
// System.out.println("Please enter a string: ");
// Scanner input = new Scanner(System.in);
message = "12345";
is_bottom = false;
//System.out.println((int)Math.ceil(message.length() / 2) + 1);
halfSize = message.length() / 2;
for (int i = 0; i < message.length(); i++) {
//Print spaces
for (int j = 0; j < message.length(); j++) {
if (j == halfSize || (j <= (halfSize + p) && j >= (halfSize - p)))
System.out.print(message.charAt(j));
else
System.out.print("*");
}
if (is_bottom == false) {
if (p >= halfSize)
is_bottom = true;
}
if (is_bottom == false)
p++;
else
p--;
System.out.println();
}
I
是行
j
是列
if 语句是您在正确位置打印字符的主要逻辑
我为消息添加了一个静态字符串,以便您可以更快地看到结果,只需取消注释您的代码以请求输入。
还要确保检查字符串的长度是否为奇数,如果不是,则抛出一条错误消息,指出它是一个无效的字符串
与许多 for 循环和 if 语句相比,它更快、更整洁、更容易理解。 :) 希望您和我一样喜欢 Java
关于java - 将字符串(最多 10 个字符)打印为菱形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43145072/