为了账号安全,请及时绑定邮箱和手机立即绑定

我想知道 system.out.println() 在这段代码中做了什么

我想知道 system.out.println() 在这段代码中做了什么

慕标琳琳 2023-09-20 17:23:58
要反转映射,使其不同的值成为键,并将其键添加到相应值下的集合中,请groupingBy()在映射条目上使用。原始映射中的值必须正确实现equals()并hashCode()用作新哈希表中的键,这一点很重要。static <K, V> Map<V, Set<K>> invert(Map<? extends K, ? extends V> original) {  return original.entrySet().stream()    .collect(Collectors.groupingBy(      Map.Entry::getValue,       Collectors.mapping(Map.Entry::getKey, Collectors.toSet())    ));}如果你想对组进行排序,你可以创建一个专门的“下游”收集器:static <K, V> Map<V, SortedSet<K>> invert(    Map<? extends K, ? extends V> original,     Comparator<? super K> order) {  Collector<K, ?, SortedSet<K>> toSortedSet =      Collectors.toCollection(() -> new TreeSet<>(order));  return original.entrySet().stream()    .collect(Collectors.groupingBy(      Map.Entry::getValue,       Collectors.mapping(Map.Entry::getKey, toSortedSet)    ));}
查看完整描述

3 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

首先,让我们看一下代码的输出:


.****

..***

...**

....*

.....


作为字符串,这与:


.****\n..***\n...**\n....*\n.....\n

默认情况下,在 Java 中使用System.out会写入标准字符输出流。当您写入此流时,可以使用各种方法,包括System.out.print和System.out.println。调用print将输出您提供给它的确切字符串,而调用println将输出您提供给它的字符串,后跟一个新行(系统的行分隔符)。如果您调用System.out.println()(println不带参数),您将输出您提供的字符串("")并将输出移动到下一行。本质上,这意味着删除System.out.println()代码中的调用将产生以下输出:


.****..***...**....*.....

此输出看起来与字符串完全相同。\n正如您所看到的,当您只调用System.out.print和不调用时,输出中没有换行符 ( ) System.out.println。


最后,让我们看看您的代码,使其更易于阅读和理解。我正在使用 Java 11+ 功能String.repeat来极大地简化此处重复字符串的操作:


public static void main(String[] args) {

  for (int i = 1; i <= 5; i++) {

    System.out.println(".".repeat(i)+"*".repeat(5-i));

  }

}

输出:


.****

..***

...**

....*

.....


这相当于原始输出。然而,阅读和理解正在发生的事情会更清楚。假设您无权访问这些功能,您可以执行以下操作:


for (int i = 1; i <= 5; i++) {

  for(int rpts = 0; rpts < i; rpts++) {

    System.out.print('.');

  }

  for(int rpts = i; rpts < 5; rpts++) {

    System.out.print('*');

  }

  System.out.println();

}

这段代码也有相同的输出。它的内容与您的代码片段没有太大区别,因为您的代码片段确实有正确的想法。然而,它的格式更加一致,这使得您自己和其他人更容易阅读代码。请注意重复如何用 name 进行标记rpts,并且(在两个示例中)迭代变量都是整数。Java 程序员通常使用整数进行迭代,因为使用迭代所节省的空间bytes对于大多数应用程序而言可以忽略不计,并且整数涵盖了您可能想要迭代的大多数值范围。


查看完整回答
反对 回复 2023-09-20
?
12345678_0001

TA贡献1802条经验 获得超5个赞

您的代码的输出是:


.****

..***

...**

....*

.....

如果没有System.out.println();,输出将是:


.****..***...**....*.....

System.out.println();对于循环的每次交互,都会在屏幕上打印一个新行字符。


查看完整回答
反对 回复 2023-09-20
?
catspeake

TA贡献1111条经验 获得超0个赞

欢迎来到堆栈溢出!

a 本身System.out.println()只会打印一个换行符,例如\n。如果您要向此语句添加参数,它将打印您的参数以及换行符。

这是 JavaDocsprintln

通过写入行分隔符字符串来终止当前行。行分隔符字符串由系统属性 line.separator 定义,并且不一定是单个换行符 ('\n')。

您链接的代码将打印一定数量的.字符和一定数量的*字符,没有任何换行符。然后,最后一个System.out.println();将打印一个换行符,并且循环将重新开始。

输出:

.****
..***
...**
....*
.....


查看完整回答
反对 回复 2023-09-20
  • 3 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信