Java 将字符串(最多10个字符)打印为菱形
我需要将字符串(最多10个字符)打印为菱形。 嗯,我尝试了将近2-3个小时来解决它,但我仍然有很多问题 代码如下:它适用于输出“a”、“abc”、“abcde”。这意味着仅适用于长度为1,3,5的字符串。而且,它只打印钻石的前半部分 非常感谢您的帮助 导入java.util.ScannerJava 将字符串(最多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;
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课程。