Java打印菱形高效简洁代码

importjava.util.Scanner;publicclass打印菱形{publicstaticvoidmain(String[]args){/**菱形*****... import java.util.Scanner;
public class 打印菱形 {
public static void main(String[] args) {
/*
* 菱形
*
***
*****
*******
*****
***
*

*/
Scanner inputScanner=new Scanner(System.in);
System.out.print("请输入要打印行数:");
int rows=0;
do{
rows=inputScanner.nextInt();
if(rows%2==0){
System.out.print("请输入奇数:");
}else{
break;
}
}while(true);
int middle=rows/2+1; //得到菱形中间的行号
for(int i=0,k=0;i<rows;i++){ //打印的总行数
if(i<middle){
k++; //打印菱形上面的三角形(包括中间那行)
}else{
k--; //打印菱形下面的三角形(不包括中间那行)
}
for(int j=0;j<middle+k;j++){ //每行打印的空格和星星总数为:菱形中间的行号middle+三角形的行号k
System.out.print(j>middle-k?"*":" "); //前(菱形中间的行号middle-三角形的行号k)的那个格子打印空格,后面的格子打印*号
}
System.out.println(); //打印完一行后换行
}
}
}

问题:有没有比上面代码更高效简洁的打印菱形方法?
展开
 我来答
满阶梧桐月明中
2013-06-10 · TA获得超过289个赞
知道小有建树答主
回答量:358
采纳率:0%
帮助的人:151万
展开全部
public class shu{
 public static void main(String[] a){
     for(int i=0;i<6;i++){
      for(int j=6-i;j>0;j--){
       System.out.print(" ");
      }
      for(int k=1;k<=2*i+1;k++){
       System.out.print("*");
      }
      System.out.println();
     } 
/*以上是打印了一个上等腰三角形*/
     for(int i=6;i>=0;i--){
      for(int j=6-i;j>0;j--){
       System.out.print(" ");
      }
      for(int k=1;k<=2*i+1;k++){
       System.out.print("*");
      }
      System.out.println();
     }
    }
}
只要把for的数据换下  下等腰三角形就出来了,所以原理其实就是打印2个等腰三角形
嚷臣缎臀cAeab
2013-06-10 · 贡献了超过108个回答
知道答主
回答量:108
采纳率:0%
帮助的人:30万
展开全部
最简单的是N个 输出 语句,完成任务不需要多高超的算法,简洁最重要
追问
那当我要打印1000行的菱形时,不知道是你那种直接输出的写法好还是我的好?
追答
这种,看情况而定啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Stale331x
推荐于2017-09-04 · TA获得超过1299个赞
知道小有建树答主
回答量:1276
采纳率:33%
帮助的人:834万
展开全部
public static void main(String args[]){
java.util.Scanner sc=new java.util.Scanner(System.in);
System.out.println("请输入一个奇数");
int line=sc.nextInt();
while(line%2==0 || line<0){
System.out.println("请重新输入一个奇数");
line=sc.nextInt();
}
print(1,line);
}

public static void print(int n,int line){
if(line%2==0) return ;
if(n>=line){
for(int i=0;i<n;i++){
System.out.print("*");
}
System.out.println();
return ;
}
for(int i=0;i<(line-n)/2.0;i++){
System.out.print(" ");
}
for(int i=0;i<n;i++){
System.out.print("*");
}
System.out.println();
print(n+2,line);
for(int i=0;i<(line-n)/2.0;i++){
System.out.print(" ");
}
for(int i=0;i<n;i++){
System.out.print("*");
}
System.out.println();
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2020-11-01
展开全部
//空心都有哦
//我们要知道在中间的那一行的长度是h所以照常理来说如果继续下去是h+1但菱形是少1格的所以h+1後变成h-1的办法是h+1-2所以就多出来这4行
import java.util.Scanner;

public class dai {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int h = sc.nextInt();
System.out.println("实心:");
rhombus(h);
System.out.println();
System.out.println("空心");
rhombush(h);
System.out.println();
}

public static void rhombus(int h) {
int f = h - h / 2;
for (int i = 1, a = f, b = f; i <= h; i++, a++, b--) {
if (i > f) {
a -= 2;
b += 2;
}
for (int j = 1; j <= a; j++) {
if (j >= b && j <= a) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.println();
}
}

public static void rhombush(int h) {
int f = h - h / 2;
for (int i = 1, a = f, b = f; i <= h; i++, a++, b--) {
if (i > f) {
a -= 2;
b += 2;
}
for (int j = 1; j <= a; j++) {
if (j == a || j == b) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.println();
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式