System.out.println()无法工作

3
这是我的第一篇文章。我很兴奋能成为这个社区的一员,而且我已经遇到了一个问题很长时间了,所以就来发帖问问吧:
在以下代码中:
if (j == 0)
      {
        if (!Arrays.equals(cipherData, c))
        {
          System.out.print("C: ");
          for (int i = 0; i < encryptedData.length; i++)
            System.out.print((char)cipherData[i]);
          System.out.println();
        }
      }
System.out.println()方法根本不返回任何东西,没有任何行或其他内容,我也不知道为什么。目标是在上面打印字节数组时,当这些if条件为真时,在打印一个空行。如果能提供帮助将不胜感激。
5个回答

5

System.out.print() 不会打印换行符。

如果你想在一些内容后面加一个空行,你需要在使用 System.out.println() 打印一些内容之后再调用一次。

补充说明: 我发现你的 for 循环条件与你要打印的数组不同,你是有意为之吗?

同时,由于你可能正在打印不可打印字符,所以可能导致终端处于不识别换行符的状态。

问题出在,println() 并没有出错。如果你没有看到换行符,请检查是否调用了该函数或者终端的状态是否正确。


如果他使用System.out.println("\n"),也许会有其他的选择。如果我错了,请纠正我。 - Smit
JVM是特定于平台的,它知道系统的换行符是什么,这就是println()将要使用的。请参见我上一条评论的编辑-这就是您可以从System类中检索它的方式。 - Brian Roach
谢谢你的帮助,但是无论我在System.out.println()方法中放置什么内容,包括"\n"或其他任何东西,都没有输出。除非我将System.out.println()放在if语句之外,否则什么也不会打印。即使我创建了一整套具有相同条件的if语句,并调用System.out.println(),也没有任何反应。 - DirtyWhite
@BrianRoach,如果终端处于无法识别其名称的状态,我该如何修复它?并且,因为它是这样的,它是否仍然能够在这些if语句之外打印? - DirtyWhite
不要打印不可打印字符,这确实是个问题。没有你的整个程序、能够重现问题的测试数据以及调试器在我面前,我真的无法告诉你出现问题的确切位置和原因。但这基本上是问题的核心所在。 - Brian Roach
显示剩余3条评论

1

在迭代循环之前,您可以检查encryptedData的长度

System.out.println("encryptedData.length:: " + encryptedData.length);

if encryptedData.length return greater than 1 then it will go into for loop.
You should debug step by step .

我不确定它的意义,但它并没有打印出来。在 System.out.println() 的这个调用中没有任何内容被打印出来;但是如果我将其放在 if 语句之外,一切都可以正常打印。 - DirtyWhite
你可以使用 System.out.println((char)cipherData[i]);。 - Mohammod Hossain
是的,字节数组可以正常打印。但是,在打印字节数组的for循环之后,仍然在if语句内的任何尝试打印的内容都不会被打印出来。逐行调试程序时,System.out.println()方法完全被跳过。 - DirtyWhite

1

谢谢你的帮助,但是无论我在System.out.println()方法中放什么,包括"\n"或其他任何东西,都不会打印出来。 - DirtyWhite
@user1905765 你确认所有的if和for条件都成立了吗? - Smit
是的,在for循环内的另一个打印语句会输出。 - DirtyWhite

1

我对此有所担忧:

System.out.print((char)cipherData[i]);

假设是一个字节数组,那么将一个字节转换为<字符>并通过字符流打印它不太可能得到漂亮的结果。首先,小于32的字节将映射到ASCII“控制字符”。
而且你可能会打印错误的数组...或者使用错误数组的长度。
(但是你问题的解释是你需要再调用一次来产生一个空行。第一个println只是终止包含您密码数组中的“字符”的行。)

0

看起来问题是您运行的JVM没有任何标准输出。就像在Windows上使用javaw.exe运行jar(这是默认值,请注意)。如果您从控制台运行它,java.exe会将输出输出到控制台窗口,但是javaw.exe不会。即使您使用java.exe从文件资源管理器窗口运行程序,您仍然无法获得任何标准输出,因为它被Windows隐藏了。

所以,在命令行窗口中运行程序,并使用java.exe而不是javaw.exe。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接