Java 将字符串(最多10个字符)打印为菱形

Java 将字符串(最多10个字符)打印为菱形,java,string,Java,String,我需要将字符串(最多10个字符)打印为菱形。 嗯,我尝试了将近2-3个小时来解决它,但我仍然有很多问题 代码如下:它适用于输出“a”、“abc”、“abcde”。这意味着仅适用于长度为1,3,5的字符串。而且,它只打印钻石的前半部分 非常感谢您的帮助 导入java.util.Scanner public class MyFirstClass1 { public static void main(String[] args) { int halfSize;

我需要将字符串(最多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;
           }

    }
}
公共类MyFirstClass1
{
公共静态void main(字符串[]args)
{
整数半码;
int p=0;
字符串消息;
System.out.println(“请输入字符串:”);
扫描仪输入=新扫描仪(System.in);
message=input.nextLine();
//System.out.println((int)Math.ceil(message.length()/2)+1);
halfSize=message.length()/2;
对于(int i=1;i=p)
{
对于(int j=0;j
有很多逻辑错误。我已经修好了。这是工作代码:

import java.util.Scanner;
public class HelloWorld{

 public static void main(String []args){
    System.out.println("Hello World");
    int halfSize;
    int p = 0;
    String message;
    System.out.println("Please enter a string: ");
    Scanner input = new Scanner(System.in);

    message = input.nextLine();
    halfSize = 2 * message.length() - 1;

     for (int i = 1; i <= message.length(); i++) {
         int pre_post_blank = (2 * halfSize) - ( 2 * i -1);

          for (int k = 0; k < pre_post_blank / 2; k++)
            System.out.print(" ");


          for(int j = 0; j < i;j++ )
          {
              System.out.print(message.charAt(j));
              System.out.print(" ");
          }



          for (int k = 0; k < pre_post_blank / 2; k++)
            System.out.print(" ");

          System.out.print("\n");
       }
       for (int i = message.length(); i >= 1; i--) {
         int pre_post_blank = (2 * halfSize) - ( 2 * i -1);

          for (int k = 0; k < pre_post_blank / 2; k++)
            System.out.print(" ");


          for(int j = 0; j < i;j++ )
          {
              System.out.print(message.charAt(j));
              System.out.print(" ");
          }



          for (int k = 0; k < pre_post_blank / 2; k++)
            System.out.print(" ");

          System.out.print("\n");
       }

   }
 }
import java.util.Scanner;
公共类HelloWorld{
公共静态void main(字符串[]args){
System.out.println(“你好世界”);
整数半码;
int p=0;
字符串消息;
System.out.println(“请输入字符串:”);
扫描仪输入=新扫描仪(System.in);
message=input.nextLine();
halfSize=2*message.length()-1;
对于(int i=1;i=1;i--){
int pre_post_blank=(2*半尺寸)-(2*i-1);
对于(int k=0;k
我认为如果在这里使用递归函数,代码可能更容易阅读。这对于理解递归也是一个很好的学习练习。像这样:

public static void printDiamond(String message) {
    diamondAbove(message, " ");
    System.out.println(message);
    diamondBelow(message, " ");
}
public static void diamondAbove(String below, String padding) {
    if(below.length() > 2) {
        String current = below.substring(0, below.length()-2);
        diamondAbove(current, padding + " ");
        System.out.println(padding + current);
    }
}
public static void diamondBelow(String above, String padding) {
    if(above.length() > 2) {
        String current = above.substring(0, above.length()-2);
        System.out.println(padding + current);
        diamondBelow(current, padding + " ");
    }
}
下面的内容应该会有所帮助

    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();
       }
int半码;
int p=0;
布尔值是_底;
字符串消息;
//System.out.println(“请输入字符串:”);
//扫描仪输入=新扫描仪(System.in);
message=“12345”;
is_bottom=false;
//System.out.println((int)Math.ceil(message.length()/2)+1);
halfSize=message.length()/2;
对于(int i=0;i=半尺寸)
是_bottom=真;
}
if(is_bottom==false)
p++;
其他的
p--;
System.out.println();
}
I
是行
j
是列 if语句是在正确位置打印字符的主要逻辑

我为消息添加了一个静态字符串,这样您可以更快地看到结果,只需取消对代码的注释即可请求输入

还要确保检查字符串的长度是否为奇数,如果不是,则抛出一条错误消息,说明该字符串无效


它比有许多for循环和if语句更快、更简洁、更容易理解。:)希望你像我一样喜欢java

如果你描述一下你需要得到什么样的输入和输出,那将非常有帮助?
(int)Math.ceil(message.length()/2)+1
应该是什么?为什么你只在第一行空白处打印空格?正如你自己写的——“这是一个正在努力用java编写第一个类的新手”,所以如果你真的想帮助他,我不认为递归是正确的方法…@TDG为自己判断哪一个更容易阅读。我已经关注其中一些迭代解决方案一段时间了,但仍然不能完全确定它们正在做什么或试图做什么。此外,递归也不是一个高级的主题。这是新手介绍公司的标准票价。sci课程。