我的一个问题是我的教授问的一个问题,那就是写一个循环,显示以下模式
我已经想出A但我的问题是B第二个
我的A
代码 for( row = 10; row >= 0; row--) // number of rows
{
for( cnt = 0; cnt < row; cnt++) // number of stars
{
System.out.print( "*");
}
System.out.println();
}
我做了多种不同的方式,并得出结论A) 正在进行
row(10)1.2.3.4.5.6.7.8.9.10
row(9) 1.2.3.4.5.6.7.8.9
row(8) 1.2.3.4.5.6.7.8
和B)正在做一些
的事情row(10) 1.2.3.4.5.6.7.8.9.10
row(9) 2.3.4.5.6.7.8.9.10
row(8) 3.4.5.6.7.8.9.10
任何人都可以帮助我解决我在代码中缺少的内容,将其转换为镜像。
答案 0 :(得分:1)
处理此类问题的简单方法是知道您拥有多少行并将代码基于此。第一个for循环表示金字塔有多少行,在本例中为10.基于行上的星号或空格数的方法如下。
基本上公式是:
变化率*(线)+ X =该线上的星星/空间量
首先获得变化率,然后获得X并在代码中实现它。
在第一行中你有10颗星,然后在第二颗9颗星上,在第三颗8颗星上,依此类推。为了获得变化率,你用第一个或第二个减去第二个数量的星(你得到相同的结果,因为它以相同的速率递减)。尝试9-10或8-9你得到-1。因此,如果您选择第一行,使用公式得到-1 * 1 + X = 10,其中X将等于11.如果要在第二个for循环中检查“-1 *行+11”,并且取line = 1,你得到的答案是10,这是你在第1行的星数。如果你走第2行或第3行,你会得到相同的公式。第3行,你得到-1 * 3 + X = 8,这导致X = 11。
请注意,您在代码中使用的是公式的左侧,即变化率*(行)+ X
接下来你有空格数。我不知道你在第一行有多少个空格,因此我假设你有10个空格,并且增加3.所以第一行是10,第二行是13,依此类推。您再次执行相同的步骤。您需要根据行数进行计算,首先通过减去第一行(第10-10行)中第二行的空格量来获得变化率。取第1行.3 * 1 + X = 10(因为在第一行我们有10个空格)。 X = 7.尝试行号2,3 * 2 + X = 13,你仍然得到X = 7.现在你知道你有一个可以在你的代码中使用的固定常数公式。
我们在代码中实现它。
public class Pyramid {
public static void main (String [] args){
for(int line = 1; line <=10; line++){
//j is decreasing since number of stars are decreasing
for(int j = -1*line + 11; j >=1; j--){
System.out.print("*");
}
//k is decreasing since number of spaces are increasing
for(int k = line; k <= 3*line +7; k++ ){
System.out.print(" ");
}
for(int j = -1*line + 11; j >=1; j--){
System.out.print("*");
}
//End of line, start new one
System.out.println();
}
}
答案 1 :(得分:0)
查看String.format(),你可以将任何字符串填充(左或右)到某个宽度,如下所示:
String stars = //use your loop from (a) to produce a number of stars
String toOutput = String.format("%10s", stars);
答案 2 :(得分:0)
我可能没有非常有效地实现它。
正如你所看到的那样,我正在打印从10开始的空间,并且每行增加2个空格以便镜像&#34;星号&#34;效果
public class asterisk {
public static void main(String[] args) {
int spaces=10;
for( int row = 10; row >= 0; row--) // number of rows
{
for( int cnt = 0; cnt < row; cnt++) // number of stars
{
System.out.print( "*");
}
for( int cnt = 0; cnt < spaces; cnt++) {
System.out.print( " "); }
spaces=spaces+2;
for( int cnt = 0; cnt < row; cnt++) {
System.out.print( "*"); }
System.out.println();
}
}
}
如果你想在A和B之间多于或少于10个空格,你只需要改变设置变量的初始值&#34;空格&#34;来!
答案 3 :(得分:0)
你想尝试这样的事情:
for( int row = 10; row >= 0; row--) // number of rows
{
for( int cnt = 10; cnt - row >= 0; cnt--) // number of stars
System.out.print(" ");
for (int cnt = 0; cnt <= row; cnt++)
System.out.print( "*");
System.out.println();
}
希望有所帮助。
答案 4 :(得分:0)
这是一个完整的代码 -
int main(){
char star = '*';
char space = ' ';
int noOfTimesToPrint = 10;
int noOfSpaceToPrint = 1;
int line = 0;
int starCount = 0;
int spaceCount = 1;
for(line=1; line<=10; line++){
for(starCount=1; starCount<=noOfTimesToPrint; starCount++){
printf("%c", star);
}
for(spaceCount=1; spaceCount<=noOfSpaceToPrint; spaceCount++){
printf("%c", space);
}
noOfSpaceToPrint = noOfSpaceToPrint+2 ;
for(starCount=1; starCount<=noOfTimesToPrint; starCount++){
printf("%c", star);
}
printf("\n");
--noOfTimesToPrint;
}
}
一些解释 -
noOfSpaceToPrint
来调整要打印的空间的初始数量。这里设置为打印1个空格。您可以根据您的要求进行调整。 第1行:********** **********
等等
希望它会有所帮助。 非常感谢
代码输出为:
答案 5 :(得分:0)
可能不应该将你的问题写成要求做作业的答案,但仍然是:
public class PyramidPrinter
public static void printPyramid(boolean mirrorize) {
for (int i = 10; i > 0; i--) {
if (mirrorize) {
for (int j = 10; j > 0; j--) {
if (j <= i) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
} else {
for (int j = 0; j < 10; j++) {
if (i > j) {
System.out.print("*");
} else {
System.out.print(" "); // might not even need
}
}
}
System.out.println();
}
}
public static void main(String[] args) {
printPyramid(false); // A
printPyramid(true); // B
}
}
这里的关键是使用向前和向后递增for循环的组合,基本上用星号填充空格,用空格填充垫星号。
结果:
**********
*********
********
*******
******
*****
****
***
**
*
**********
*********
********
*******
******
*****
****
***
**
*
答案 6 :(得分:0)
根据我在这里收集的所有信息,这是我的代码的结束结果,谢谢大家。 `
for( row = 10; row >= 0; row--) // number of rows
{
for( cnt= 10; cnt - row >= 0; cnt--) // number of spaces before the asterisk
{
System.out.print( " ");
}
for( cnt = 0; cnt < row; cnt++) // number of stars
{
System.out.print("*");
}
System.out.println();
}
}
`
答案 7 :(得分:0)
public class Printstar {
public static void main(String[] args){
int space=1;
for(int i=1;i<=10;i++)
{
for(int j=0;j<10-i;j++)
{
System.out.print("*");
}
for(int j=0;j<space;j++)
System.out.print(" ");
for(int j=0;j<10-i;j++)
System.out.print("*");
System.out.println();
space=space+2;
}
}}