在java中打印多行输出,而不使用新行字符

在java中打印多行输出,而不使用新行字符,java,Java,这是面试问题之一。我应该在命令行上打印多行输出,而不使用java中的换行符(\n)。我试着在谷歌上搜索,但没有找到合适的答案。如果我正在打印5个数字,那么它应该按以下方式打印。但我也不应该使用换行符或循环。我必须使用单个println()语句打印此文件。你能给我一些想法吗?谢谢 1 2 3 4 5 您可以递归地执行此操作: public void foo(int currNum) { if (currNum > 5) return; println(currNum);

这是面试问题之一。我应该在命令行上打印多行输出,而不使用java中的换行符(
\n
)。我试着在谷歌上搜索,但没有找到合适的答案。如果我正在打印5个数字,那么它应该按以下方式打印。但我也不应该使用换行符或循环。我必须使用单个
println()
语句打印此文件。你能给我一些想法吗?谢谢

1
2
3
4
5

您可以递归地执行此操作:

public void foo(int currNum) {
  if (currNum > 5) 
    return;
  println(currNum);
  foo(currNum + 1);
}

然后您只使用一个
println
,而不使用for或while循环。

您可以递归执行:

public void foo(int currNum) {
  if (currNum > 5) 
    return;
  println(currNum);
  foo(currNum + 1);
}

然后,您只使用一个
println
,而不使用for或while循环。

可能会根据要求作弊,但技术上只有一个println语句,没有循环

public int recursivePrint(int number)
{
  if (number >=5 )
    return number;
  else
    System.out.println(recursivePrint(number++));
}

可能是基于需求作弊,但技术上只有1条println语句,没有循环

public int recursivePrint(int number)
{
  if (number >=5 )
    return number;
  else
    System.out.println(recursivePrint(number++));
}

如果不允许您使用
\n
println()
,则您可以获得系统
行。分隔符
,例如

String h = "Hello" + System.getProperty("line.separator") + "World!"

希望这有帮助,玩得开心

如果不允许您使用
\n
println()
,那么您可以获得系统
行。分隔符
,例如

String h = "Hello" + System.getProperty("line.separator") + "World!"

希望这有帮助,玩得开心

一种方法是:平台独立

final String EOL = System.getProperty("line.separator");
System.out.println('1' + EOL + '2' + EOL + '3' + EOL + '4' + EOL + '5');
char eol = (char) 13;
System.out.println("" + '1' + eol + '2' + eol + '3' + eol + '4');
这取决于平台

final String EOL = System.getProperty("line.separator");
System.out.println('1' + EOL + '2' + EOL + '3' + EOL + '4' + EOL + '5');
char eol = (char) 13;
System.out.println("" + '1' + eol + '2' + eol + '3' + eol + '4');

一种方法是:独立于平台

final String EOL = System.getProperty("line.separator");
System.out.println('1' + EOL + '2' + EOL + '3' + EOL + '4' + EOL + '5');
char eol = (char) 13;
System.out.println("" + '1' + eol + '2' + eol + '3' + eol + '4');
这取决于平台

final String EOL = System.getProperty("line.separator");
System.out.println('1' + EOL + '2' + EOL + '3' + EOL + '4' + EOL + '5');
char eol = (char) 13;
System.out.println("" + '1' + eol + '2' + eol + '3' + eol + '4');

好的,现在我想我明白你的问题了。这个怎么样

println(String.format("%d%n%d%n%d%n%d%n%d%n", 1, 2, 3, 4, 5));

好的,现在我想我明白你的问题了。这个怎么样

println(String.format("%d%n%d%n%d%n%d%n%d%n", 1, 2, 3, 4, 5));

无循环,1个println调用,+灵活性:

public static void main (String[] args) {
    print(5);
}

final String newLine = System.getProperty("line.separator");
public void print(int fin) {
    System.out.println(printRec("",1,fin));
}
private String printRec(String s, int start, int fin) {
    if(start > fin)
        return s;
    s += start + newLine;
    return printRec(s, start+1, fin);
}

无循环,1个println调用,+灵活性:

public static void main (String[] args) {
    print(5);
}

final String newLine = System.getProperty("line.separator");
public void print(int fin) {
    System.out.println(printRec("",1,fin));
}
private String printRec(String s, int start, int fin) {
    if(start > fin)
        return s;
    s += start + newLine;
    return printRec(s, start+1, fin);
}

有很多方法可以实现这一点

使用“\n”的一种替代方法是输出字符的字节值。所以,举一个例子,打印出你的例子中的数字1-5的列表

char line = (char)10;
System.out.println("1" + line+ "2" + line+ "3" + line + "4" + line+ "5");
您还可以构建一个byte[]数组或char[]数组并输出

char line = (char)10;
char[] output = new char[9]{'1',line,'2',line,'3',line,'4',line,'5'};
System.out.println(new String(output));

有很多方法可以实现这一点

使用“\n”的一种替代方法是输出字符的字节值。所以,一个例子,打印出你的例子中的数字1-5的列表

char line = (char)10;
System.out.println("1" + line+ "2" + line+ "3" + line + "4" + line+ "5");
您还可以构建一个byte[]数组或char[]数组并输出

char line = (char)10;
char[] output = new char[9]{'1',line,'2',line,'3',line,'4',line,'5'};
System.out.println(new String(output));

新行的ASCII值为10。 所以用这个

char line = 10;
System.out.print("1" + line + "2" + line ......);

新行的ASCII值为10。 所以用这个

char line = 10;
System.out.print("1" + line + "2" + line ......);

旁白:
由于System.out
是一个打印流,它可能无法支持转义码

但是,您可以定义自己的
println(msg)
函数,并对其进行一次调用。可能是作弊,但除非他们明确地说
System.out.println
,否则你就是黄金(该死,即使他们这么做,你也可以在本地范围内使用在函数外部定义的类定义自己的名为
System
的对象,给它一个带有函数
println(msg)
的字段
out
,而你仍然是免费的).

旁白:
由于System.out
是一个打印流,它可能无法支持转义码


但是,您可以定义自己的
println(msg)
函数,并对其进行一次调用。可能是作弊,但除非他们明确地说
System.out.println
,否则你就是黄金(该死,即使他们这么做,你也可以在本地范围内使用在函数外部定义的类定义自己的名为
System
的对象,给它一个带有函数
println(msg)
的字段
out
,而你仍然是免费的).

为什么不能使用\n?因为它取决于平台,或者…?当面试变成琐事比赛时,可能会重复,每个人都会输。知道这条特定的信息应该表明什么?我不是批评你想知道——你没有提出这个问题——但我担心我自己的反应是“我不知道,我也不在乎”。是否允许回车/换行字符?你可以把它们放在每个数字之间,以满足给定的(愚蠢的)要求。@PerryMonschau,我不知道为什么我不能使用
\n
,我想知道不使用
\n
@rcook是否可以打印这些,这与满足(愚蠢的)要求无关。我想知道是否有办法做到这一点。但是“我不知道也不在乎”的反应不会给出任何答案,是吗?为什么不能使用\n?因为它取决于平台,或者…?当面试变成琐事比赛时,可能会重复,每个人都会输。知道这条特定的信息应该表明什么?我不是批评你想知道——你没有提出这个问题——但我担心我自己的反应是“我不知道,我也不在乎”。是否允许回车/换行字符?你可以把它们放在每个数字之间,以满足给定的(愚蠢的)要求。@PerryMonschau,我不知道为什么我不能使用
\n
,我想知道不使用
\n
@rcook是否可以打印这些,这与满足(愚蠢的)要求无关。我想知道是否有办法做到这一点。但“我不知道,我也不在乎”的反应并没有给出任何答案,是吗?哇!这真的是递归的吗?哇!这真的是递归的吗?你的回答也很有帮助。谢谢。你的回答也很有帮助。谢谢。从技术上讲,递归函数是循环,因为您可以将它们视为:while(!safected){safected=something(argtuple);callStack.push(argtuple);argtuple=somethingElse(argtuple)};而((argtuple=callstack.pop())!=null){wrapustuff(argtuple)}@扎克:哦,我知道我的评论与这个问题无关。这就是为什么我的评论是:(a)不是回答问题,而是回答,(b)评论,不是回答问题