我可以“重新开始” java扫描仪吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了我可以“重新开始” java扫描仪吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2332字,纯文字阅读大概需要4分钟。
内容图文
![我可以“重新开始” java扫描仪吗?](/upload/InfoBanner/zyjiaocheng/687/2175d3fd2ade409b8846272685487ade.jpg)
有没有办法使扫描仪再次从其输入的起点开始?
上下文:我刚刚了解到https://adventofcode.com/是一个问题.
第一个任务很简单(就像第一个任务通常那样).
您将获得一系列带符号前缀(或-)的整数值
即
-7
+16
+5
[...]
并需要添加它们.
没什么大不了.
task01.kts
import java.util.*
val scanner = Scanner(System.`in`)
private var total = 0
while(scanner.hasNext()){
val number = scanner.nextInt()
total += number
}
println(total)
第二项任务指出,读取的输入要重复一遍又一遍,并且我们对第一个总数达到两次感兴趣.
再次,相当简单:
task02.kts
import java.util.*
import java.io.File
import Task02.Result.*
sealed class Result{
object None: Result()
data class Found(val duplicate:Int):Result()
}
if(args.size < 1) throw IllegalStateException("please provide input file as first arg")
val input = File(args[0])
private var total = 0
private val seen = mutableSetOf(0)
private var result: Result = None
while(result is None){
val scanner = Scanner(input)
while(scanner.hasNext()){
val number = scanner.nextInt()
total += number
if(seen.contains(total)){
result = Found(total)
break;
}
else seen.add(total)
}
}
println((result as Found).duplicate)
但是,这两个任务之间的一个有趣的区别是,尽管我不在乎第一部分的数字来自何处,但第二部分却需要一个文件.
这让我开始思考.是否有“环绕式扫描仪”之类的东西?
我可以手动重置扫描仪的指针吗?
还是可以链接扫描程序,使第一个扫描程序看到的所有内容(包括它跳过的内容)都传递给第二个?
你知道吗
Scanner1 Scanner2
[ O | L | L | E | H ] [ | | | | ]
[ | O | L | L | E ] [ | | | | H ]
[ | | O | L | L ] [ | | | E | H ]
[ | | | O | L ] [ | | L | E | H ]
[ | | | | O ] [ | L | L | E | H ]
[ | | | | ] [ O | L | L | E | H ]
还是这些路线上的其他东西?
我有一个预感,不是因为我能想到的大多数东西都需要缓存所有输入(取决于输入大小,可能不合理),但是我仍然很好奇我是否没有忽略某些东西.
解决方法:
如果可以重置扫描仪,则有两种可能性:
1)每次重置时,它将再次开始从文件读取.与每次创建一个新的相比,它没有任何好处.
2)将所有读取的数据保存在RAM中.但是您也可以自己保存它.通常它会更高效.在这种情况下,您可以存储整数而不是字符串,从而节省了内存.
如果您只是不想每次都关闭和重新打开文件,则可以使用一些较低级别的文件特定API,例如RandomAccessFile,可以使用seek(0)进行重置.
Scanner没有寻求方法的原因是它不仅接受文件,而且接受任何System.in这样的InputStream,而该InputStream不能被设计再次读取.
内容总结
以上是互联网集市为您收集整理的我可以“重新开始” java扫描仪吗?全部内容,希望文章能够帮你解决我可以“重新开始” java扫描仪吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。