求:用Java语言写只用一个for循环输出“*”组成的空心菱形的思路或代码
2个回答
展开全部
//只用一个for循环等于用一维的思维处理二维的问题,这就必须找到两者之间的关系。
//经过观察,发现*出现的位置与所处行数确有一定关系。
import java.util.Arrays;
public class ForTest {
public static void main(String[] args) {
int midIndex = 4;
int size = midIndex * 2 + 1;
for (int index = 0; index < size; index++) {
char[] c = new char[size];
Arrays.fill(c, ' ');
int x1 = Math.abs(midIndex - index);
c[x1] = '*';
c[midIndex * 2 - x1] = '*';
System.out.println(new String(c));
}
}
}
//经过观察,发现*出现的位置与所处行数确有一定关系。
import java.util.Arrays;
public class ForTest {
public static void main(String[] args) {
int midIndex = 4;
int size = midIndex * 2 + 1;
for (int index = 0; index < size; index++) {
char[] c = new char[size];
Arrays.fill(c, ' ');
int x1 = Math.abs(midIndex - index);
c[x1] = '*';
c[midIndex * 2 - x1] = '*';
System.out.println(new String(c));
}
}
}
2013-03-29
展开全部
用嵌套for循环实现
/*
思路
下面是一个边长为4的棱形
* ............第1行开始打印了3个空格(4-1=3)
* * ............第2行开始打印了2个空格(4-2=2)
* * ............第3行开始打印了1个空格(4-3=1)
* * ............第4行开始打印了0个空格(4-4=0)。由此可得出规律,第i行开始打印的空格数为 边长-行号
-----------------分界线,将棱形分成上下两部分,进行对称打印------------
* *
* *
*
*/
//Java Code
class test
{
public test()
{
int n=4;//棱形的边长
int i,j,k,count;
//先打印上半部分
for(i=0;i<n;i++)
{
for(j=1;j<n-i;j++)
System.out.print(" ");
if(0==i) //首、尾行只包含一个"*",当独打印
System.out.println("*");
else
{
count=2*i+1;
for(k=0;k<count;k++)
{
if(0==k||count-1==k) //首尾打印"*"
System.out.print("*");
else //其他位置打印空白(" ")
System.out.print(" ");
}
System.out.print("\n");
}
}
//对称地输出下半部分
for(i=n-2;i>=0;i--)
{
for(j=0;j<n-i-1;j++)
System.out.print(" ");
if(0==i)
System.out.println("*");
else
{
count=2*i+1;
for(k=0;k<count;k++)
{
if(0==k||count-1==k)
System.out.print("*");
else
System.out.print(" ");
}
System.out.print("\n");
}
}
}
//mian方法
public static void main(String[] args)
{
test t=new test();
}
}
运行得到如下结果:
/*
思路
下面是一个边长为4的棱形
* ............第1行开始打印了3个空格(4-1=3)
* * ............第2行开始打印了2个空格(4-2=2)
* * ............第3行开始打印了1个空格(4-3=1)
* * ............第4行开始打印了0个空格(4-4=0)。由此可得出规律,第i行开始打印的空格数为 边长-行号
-----------------分界线,将棱形分成上下两部分,进行对称打印------------
* *
* *
*
*/
//Java Code
class test
{
public test()
{
int n=4;//棱形的边长
int i,j,k,count;
//先打印上半部分
for(i=0;i<n;i++)
{
for(j=1;j<n-i;j++)
System.out.print(" ");
if(0==i) //首、尾行只包含一个"*",当独打印
System.out.println("*");
else
{
count=2*i+1;
for(k=0;k<count;k++)
{
if(0==k||count-1==k) //首尾打印"*"
System.out.print("*");
else //其他位置打印空白(" ")
System.out.print(" ");
}
System.out.print("\n");
}
}
//对称地输出下半部分
for(i=n-2;i>=0;i--)
{
for(j=0;j<n-i-1;j++)
System.out.print(" ");
if(0==i)
System.out.println("*");
else
{
count=2*i+1;
for(k=0;k<count;k++)
{
if(0==k||count-1==k)
System.out.print("*");
else
System.out.print(" ");
}
System.out.print("\n");
}
}
}
//mian方法
public static void main(String[] args)
{
test t=new test();
}
}
运行得到如下结果:
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询