这是我用于程序的代码。我很难以我想要的方式显示它,没有括号和逗号。 我希望它像金字塔一样:
X #
XXX ###
XXXXX #####
XXXXXXX #######
XXXXXXXXX #########
我的代码给出了我不想要的方括号和逗号。我明白了:
[ X , XXX , XXXXX , XXXXXXX , XXXXXXXXX]
[]
[]
[]
[]
[ # , ### , ##### , ####### , #########]
我的代码:
Stack stackA = new Stack();
stackA.push(" X ");
stackA.push(" XXX ");
stackA.push(" XXXXX ");
stackA.push(" XXXXXXX ");
stackA.push("XXXXXXXXX");
Stack stackB = new Stack();
Stack stackC = new Stack();
Stack stackD = new Stack();
Stack stackE = new Stack();
Stack stackF = new Stack();
stackF.push(" # ");
stackF.push(" ### ");
stackF.push(" ##### ");
stackF.push(" ####### ");
stackF.push("#########");
Stack[] combine = new Stack[6];
combine[0] = stackA;
combine[1] = stackB;
combine[2] = stackC;
combine[3] = stackD;
combine[4] = stackE;
combine[5] = stackF;
for (int i = 0; i < combine.length; i++)
{
System.out.print(combine[i] + " ");
System.out.println();
}
答案 0 :(得分:1)
您的方括号[]
似乎来自空Stack
s。
因此,在for
循环中,请确保不要打印空堆栈。
要避免使用逗号,请不要使用自动toString()
打印堆栈,而是自行迭代。
答案 1 :(得分:1)
你需要第二个for循环:
Parse.Cloud.afterFind("PublicationImage", function(request, response) {
...
votesQuery.equalTo("author", user)
votesQuery.containedIn("target", publicationImagesIds);
votesQuery.find()
.then(function(votes) {
votes.forEach(function(vote) {
voteTarget = vote.get("target");
for (var i = 0; i < publicationImages.length; i++) {
if (publicationImages[i].id == voteTarget.id) {
publicationImages[i].set("userVote", vote); <-- Here I add an obj
}
}
});
response.success(publicationImages);
})
...
});
这将打印:
for (int i = 0; i < combine.length; i++) {
if (combine[i].size() > 0) {
for (Object obj : combine[i]) {
System.out.println(obj);
}
}
}
答案 2 :(得分:0)
for (int line = 0; line <= 5; line++)
{
for (int i = 0; i < combine.length; i++) {
Stack st = combine[i];
if (st.size() > line) {
System.out.print(st.get(line) + " ");
} else {
System.out.print(" ");
}
}
System.out.println();
}
打印
X #
XXX ###
XXXXX #####
XXXXXXX #######
XXXXXXXXX #########
挑战包括:
System.out
,因此一次打印一个金字塔不会为您提供金字塔并排输出。而是在每一行上我们需要从每个堆栈中打印一个元素,该元素足够高以在该行上具有元素。对于不够高的堆栈,我打印一个空白字符串,以确保以下堆栈正确排列。为了更好地使用Java库类,您可以考虑以下内容。这不是你问的问题,如果你不想使用它,请忽略。
Stack<String> stackA = new Stack<>();
。这将允许您处理从堆栈中获取的元素String
对象,而不仅仅是Object
。List
代替数组,例如List<Stack<String>> combine = new ArrayList<>();
(可选择提供建议的容量:new ArrayList<>(6)
)。 Stack
类被视为遗留类。文档说你应该更喜欢Deque
界面。我推荐ArrayDeque
类,它实现了接口。像:
Deque<String> stackA = new ArrayDeque<>(5);
List<Deque<String>> combine = new ArrayList<>(6);
combine.add(stackA);
要将Deque
用作堆叠,您可以使用其addFirst
方法进行推送,将removeFirst
用于弹出窗口。它在the documentation中解释。
for
循环,例如for (Deque<String> pyramid : combine)
。PS如果你想让你的堆栈从底部生长,你应该先推出最宽的元素,然后按相反的顺序打印这些行。你很快就会发现。
答案 3 :(得分:0)
如果您不需要combine
堆栈数组,也许这段代码会有所帮助。
while (!stackA.empty()) {
stackB.push(stackA.pop());
stackC.push(stackF.pop());
}
while (!stackB.empty()) {
System.out.println(stackB.pop() + " " + stackC.pop());
}
输出:
X #
XXX ###
XXXXX #####
XXXXXXX #######
XXXXXXXXX #########
两个堆栈具有相同的大小。所以循环时间是一样的。你知道LIFO(后进先出)是堆栈基础。在第一个循环中,我弹出两个Stacks以反向顺序。在最后一个循环中,我刚刚弹出并打印了堆栈。