如何让我的其中一个字垂直打印?

How do I get one of my words to print vertically?

这段代码中的单词应该在一个共同的字母处相交,并打印出尽可能多的单词可以相互交叉的次数。

我有正确的次数,但单词的格式不正确。

它应该是这样的:

 b
lottery
 a
 t

  b
  o
  a
lottery

   b
   o
   a
lottery

但是我的打印出来是这样的:

b
lotto
    a
    t
                b
lotto
    a
    t
                b
lotto
    a
    t

下面显示了我的代码,是我的打印方法有什么问题导致的吗?

 public class Assg23
{
    public static void main(String[] args)
    {

            String w1 = args[0];
            String w2 = args[1];

            int numberOfCrosses = 0;

            int pos1=0;
            int pos2=0;


            for(int i=0; i < w1.length(); i++)
            {
                for(int j=0; j < w2.length(); j++)
                {   
                    if(w1.charAt(i) == w2.charAt(j))
                    {
                        numberOfCrosses++;
                        crossesAt(w1, pos1, w2, pos2);
                        printCross(w1, pos1, w2, pos2);
                    }
                }
            }

        if(numberOfCrosses == 0)
        {
            System.out.println("Words do not cross");
        }
    }

    private static boolean crossesAt(String w1, int pos1, String w2, int pos2)
    {
        if(w1.charAt(pos1) == w2.charAt(pos2))
        {
            return true;
        }
        else
        {
            return false;
        }

    }

    private static void printCross(String w1, int pos1, String w2, int pos2)
    {
        for(int i=0; i < w1.length(); i++)
        {
            for(int j = 0; j < w2.length(); j++)
            {
                if((j== pos1) && i<w2.length())
                {
                    System.out.println(w2.charAt(i));
                }
                if((i == pos2) && j<w1.length())
                {   
                    System.out.print(w1.charAt(j));
                }
                else
                {
                    System.out.print(" ");
                }   

            }
        }



    }

这是您的 main() 方法的正确版本。您会注意到我删除了 crossesAt() 方法,因为它所做的只是比较两个字符,这可以用不到一行代码完成。

public static void main(String[] args) {
    String w1 = args[0];
    String w2 = args[1];

    int numberOfCrosses = 0;

    for (int i=0; i < w1.length(); i++) {
        for (int j=0; j < w2.length(); j++) {
            if (w1.charAt(i) == w2.charAt(j)) {
                numberOfCrosses++;
                printCross(w1, i, w2, j);
            }
        }
    }

    if (numberOfCrosses == 0) {
        System.out.println("Words do not cross");
    }
}

这里是您的 printCross() 方法的正确实现:

private static void printCross(String w1, int pos1, String w2, int pos2) {
    // you can replace this for-loop with the line that follows it
    // if you don't get compiler errors
    String spaces = "";
    for (int i=0; i < pos1; ++i) spaces += " ";
    //String spaces = String.format(String.format("%%0%dd", pos1), 0).replace("0", " ");

    for (int i=0; i < w2.length(); ++i) {
        if (i == pos2) {
            System.out.println(w1);
        }
        else {
            System.out.println(spaces + w2.charAt(i));
        }
    }
}

这里是使用 printCross() 的例子:

printCross("boat", 1, "lottery", 1);
printCross("coffee", 4, "beverage", 3);

输出:

 l
boat
 t
 t
 e
 r
 y
    b
    e
    v
coffee
    r
    a
    g
    e

使用 (归功于他)这是完整的代码:

public static void main(String[] args) {
        String w1 = "boat";
        String w2 = "lottery";

        int numberOfCrosses = 0;

        int pos1=0;
        int pos2=0;
        int spaces = 0;

        for(int i=0; i < w1.length(); i++)
        {
            for(int j=0; j < w2.length(); j++)
            {
                spaces = 0;
                if(w1.charAt(i) == w2.charAt(j))
                {
                    numberOfCrosses++;
                    printCross(w1, i, w2);
                } else spaces++;
            }
        }

        if(numberOfCrosses == 0)
        {
            System.out.println("Words do not cross");
        }
    }

    private static void printCross(String w1, int pos, String w2) {
        String spaces = String.format(String.format("%%0%dd", pos1), 0).replace("0", " ");
        int lengthToTraverse = (w1.length() > w2.length()) ? (w1.length()) : (w2.length());
        for (int i=0; i < lengthToTraverse; ++i) {
            if (i == pos) {
                System.out.println(w2);
            }
            else {
                if(i<w1.length()) {
                    System.out.println(spaces + w1.charAt(i));
                }
            }
        }
    }

我添加了对 i 的检查并删除了方法中的一个额外参数。输出它:

b lottery a t b o a lottery b o a lottery