Java:如何打印没有方括号和逗号的数组

时间:2018-05-27 05:36:35

标签: java arrays stack comma brackets

这是我用于程序的代码。我很难以我想要的方式显示它,没有括号和逗号。 我希望它像金字塔一样:

    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();
}

4 个答案:

答案 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,因此一次打印一个金字塔不会为您提供金字塔并排输出。而是在每一行上我们需要从每个堆栈中打印一个元素,该元素足够高以在该行上具有元素。对于不够高的堆栈,我打印一个空白字符串,以确保以下堆栈正确排列。
  • 我假设没有金字塔高于5,并且所有金字塔元素都是9个字符宽。如果需要,可以对代码进行细化以考虑其他尺寸。

为了更好地使用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以反向顺序。在最后一个循环中,我刚刚弹出并打印了堆栈。