我是Java的新手,也是stackoverflow的新手,所以这是我一直忙了几天的问题。 我要做一个作业,一个控制台应用程序在控制台上打印“ M”,该控制台由星号的“ *”组成,并由减号“-”包围,它们充当空格。 字符的宽度为N。 但是,正如您从下面的代码中看到的那样,由于似乎无法弄清楚如何打印字符的另一部分(与当前字符相反),我仅完成了一半。 对不起,我的编程和解释都很混乱,因为我对编程完全陌生。请给我一些有关如何继续执行代码逻辑的好的建议。
var newArr = [3, 5, 7, 9, 11];
let N = Number(newArr[0]);
console.log(`N = ${N}`);
let str = '';
let j = '';
let k = ''
if (N > 2 && N < 10000) {
for (var i = '-'; i.length <= N + 1; i += '-') {
str += '*';
if (j.length <= N * 5) {
for (j = ''; j.length <= N * 5; j += '-') {
if (j.length >= N && j.length < N * 2) {
j += str.repeat(N);
} else if (j.length >= N * 3.5 && j.length < N * 4) {
j += str.repeat(N)
}
}
}
console.log(i + j)
}
}
这是它的外观:
N = 3
---***---***---
--*****-*****--
-***-*****-***-
***---***---***
N = 5
-----*****-----*****–––––-----*****-----*****–––––
----*******---*******--------*******---*******----
---*********-*********------*********-*********---
--*****-*********-*****----*****-*********-*****--
-*****---*******---*****--*****---*******---*****-
*****-----*****–----**********-----*****–----*****
N = 7
-------*******-------*******--------------*******-------*******-------
––––––*********-----*********––––––––––––*********-----*********––––––
-----***********---***********----------***********---***********-----
----*************-*************--------*************-*************----
---*******-*************-*******------*******-*************-*******---
--*******---***********---*******----*******---***********---*******--
-*******-----*********-----*******--*******-----*********-----*******-
*******-------*******-------**************-------*******-------*******
答案 0 :(得分:0)
好的,我可以给你一些线索。
通常,您需要定义为 ROW 的 1个父循环,该循环将打印M的每一行以及定义为 COL 的嵌套循环将结果与'*'或'-'连接起来。
for (let row = n; row >= 0; row -= 1)
在ROW内,您需要其他构造来检查行号,并且必须检查您是在M的顶部还是底部,即您必须将M分为2部分 ,顶部和底部。
在ROW 内部,您需要定义为 COL 的嵌套循环,以便可以使用 COL
合并结果 简而言之,在每个嵌套循环中,您必须将结果+ ='*'或'-'连接起来; 并且必须在每行上连接结果+ ='\ r \ n',即换行。TOP部分是:
---***---***---
--*****-*****--
底部部分是:
-***-*****-***-
***---***---***
因此您具有如果(顶部)其他(底部)逻辑
在顶部/底部逻辑中,您必须弄清楚模式,即您拥有多少个星星/破折号,并它们如何在每个行上增加/减少< / strong>。
一些可以帮助您的变量:
const n = 7;
const middle = Math.ceil(n / 2);
let asterisksTopLength = n;
let asterisksBottomLength = n - 1;
let dashesBottomLength = 1;
let dashesTopLength = n;
let result = '';
提示:您需要在TOP / BOTTOM内部的每个ROW上更改破折号/星号变量
也尝试将任务划分为几个小任务。即尝试找出如何首先打印破折号,即
---
--
-
然后如何将上面的破折号与'*'连接起来,使它们变成
---***
--*****
-***
等...
顺便说一句,有一个没有嵌套循环的解决方案,即仅使用1个循环,就像您已经了解了string.repeat()一样,但是我相信您的任务是练习嵌套循环,因此您必须避免.repeat()。 / p>