java 中 System.out.print .out是啥原理为啥可以直接用?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 中 System.out.print .out是啥原理为啥可以直接用?相关的知识,希望对你有一定的参考价值。
java 中 System.out.print .out是什么原理为什么可以直接用?源码显示 out=null
out 是System 类的一个公共静态成员,可以由外部直接使用,这个成员是由 initializeSystemClass 方法初始化的,而这个方法是由 java 虚拟机调用的。在 main 函数启动就已经初始化好了,所以可以直接使用。追问
init能看到源码吗
追答当然可以,就在 java.lang.System 类里面。
参考技术A nterprises will creSystem.out.print 仅中奖线
【中文标题】System.out.print 仅中奖线【英文标题】:System.out.print the winning line only 【发布时间】:2021-12-31 12:28:00 【问题描述】:我有一个 Java 彩票游戏任务,并且我正在运行一个 while 循环以防止结果中的数字重复。
我得到一个没有重复的数字列表,但是System.out.print
正在返回所有行,直到我得到最后一个没有重复的行。有没有办法只打印最后的“获胜”行?
代码如下
while (numCount<=9)
int randNumber = rand.nextInt(99)+1;
if (results[0] == randNumber || results[1] == randNumber || results[2] == randNumber || results[3] == randNumber ||
results[4] == randNumber || results[5] == randNumber || results[6] == randNumber || results[7] == randNumber
|| results[8] == randNumber || results[9] == randNumber)
else
Array.setInt(results, numCount, randNumber);
numCount++;
System.out.print("The Lottery Numbers are: ");
for (int i=0; i<10; i++)
//add a 0 in front of the number is it's less that 10
if (results[i] <10)
System.out.print("0"+results[i]+" ");
【问题讨论】:
将你的 print for 循环带出 while 循环。 您可以将结果数组替换为Set<Integer>
并应用contains。
【参考方案1】:
您可以更简单地执行此操作,依赖于 Set
中没有重复对象这一事实。
public static void main(String[] args)
Random rand = new Random();
Set<Integer> winningNumbers = new HashSet<>();
while (winningNumbers.size() < 9)
int randNumber = rand.nextInt(99) + 1;
winningNumbers.add(randNumber);
System.out.print("The Lottery Numbers are: ");
for (Integer number : winningNumbers)
//add a 0 in front of the number is it's less that 10
if (number < 10)
System.out.print("0" + number + " ");
else
System.out.print(number + " ");
您甚至可以简化打印数字的方式,依靠 printf()
和 %02d
,这意味着使用 0 填充作为打印数字 2 的最大宽度:
public static void main(String[] args)
Random rand = new Random();
Set<Integer> winningNumbers = new HashSet<>();
while (winningNumbers.size() < 9)
int randNumber = rand.nextInt(99) + 1;
winningNumbers.add(randNumber);
System.out.print("The Lottery Numbers are: ");
System.out.printf("%02d %02d %02d %02d %02d %02d %02d %02d %02d", winningNumbers.toArray());
在您的代码中,只需将行 System.out.print("The Lottery Numbers are: ");
移动到 while 循环之前,将循环 for (int i=0; i<10; i++)
移动到 while 循环之后,如下所示:
System.out.print("The Lottery Numbers are: ");
while (numCount<=9)
int randNumber = rand.nextInt(99)+1;
if (results[0] == randNumber || results[1] == randNumber || results[2] == randNumber || results[3] == randNumber ||
results[4] == randNumber || results[5] == randNumber || results[6] == randNumber || results[7] == randNumber
|| results[8] == randNumber || results[9] == randNumber)
else
Array.setInt(results, numCount, randNumber);
numCount++;
for (int i=0; i<10; i++)
//add a 0 in front of the number is it's less that 10
if (results[i] <10)
System.out.print("0"+results[i]+" ");
【讨论】:
感谢您的回复!在课堂上,我们还没有使用过 HashSet 或 Formatter,我们被特别告知不要在这个作业中使用 formatter。我已经尝试了您的建议并且效果很好,所以我会记住这一点以供将来参考。 当我按照自己的方式进行操作时,使用他展示的课程,我得到以下结果中奖号码的总和是:449彩票号码是:91 88 74 12 95 66 23 56 00 00 总和中奖号码为:505 中奖号码为:91 88 74 12 95 66 23 56 67 00 中奖号码总和为:572 中奖号码为:91 88 74 12 95 66 23 56 67 00 中奖号码总和是:572彩票号码是:91 88 74 12 95 66 23 56 67 15 中奖号码总和是:587 我已经用你的代码更新了我的答案,你需要做一些修复以避免输出中出现重复的行。请检查一下;)谢谢! 成功了! :) 我很高兴能帮上忙! ;)以上是关于java 中 System.out.print .out是啥原理为啥可以直接用?的主要内容,如果未能解决你的问题,请参考以下文章
JAVA中System.out.println和System.out.print有什么区别
python中print()函数的“,”与java中System.out.print()函数中的“+”
java 中 System.out.print .out是啥原理为啥可以直接用?