如何让我的其中一个字垂直打印?
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
这段代码中的单词应该在一个共同的字母处相交,并打印出尽可能多的单词可以相互交叉的次数。
我有正确的次数,但单词的格式不正确。
它应该是这样的:
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