java编程 为什么控制台读取前两个数字后,后面的就不读取了?
如图56789没有读取。必须得回车?如果我把getOnePoint方法体,直接写在主函数中,就没事了。请问出错原因是为什么?...
如图5 6 78 9 没有读取。必须得回车?如果我把getOnePoint 方法体,直接写在主函数中,就没事了。请问出错原因是为什么?
展开
1个回答
2019-06-14
展开全部
用参数的方式就可以一行输入,以空格分隔。
getOnePoint(input);
一个Scanner对象就行了,没必要每次都new个新的。
你的getOnePoint方法每调用一次就new个新的Scanner对象。
下一次调用getOnePoint方法又new的Scanner对象是从新的一行读取数字。
更多追问追答
追问
猛男你好···感谢你的指正,但是我没有理解,为什么输出结果是(3,4)(3,2),而不是(3,4)(5,6)啊?而且多输入了参数,为什么没有报错。。
6.对象是多。不过,之前的输入已经存储在positions 数组里了啊?
追答
nextDouble()返回一个double型的数,调用了2次,就会得到2个double型的数。
回车表示一次输入结束,Scanner会把回车之前输入的字符包括空格(3 4 5 6 78 9)都放入字符缓存中,然后以空格分割。nextDouble()只返回一个数。第一个是3,则第一次调用nextDouble返回了3,第二次调用nextDouble返回了4,然后你的代码中把3,4放在了position数组中,然后getOnePoint方法结束返回了position数组,回到for循环,把position数组放在了二维数组positions中(此时放入positions中的数字只有3 4),进行循环的下一轮,再次调用getOnePoint方法,又创建了新的Scanner对象,读取了第一次回车后输入的3,你输入了回车,再读取输入的2,你再次输入回车结束。
上次输入的(3 4 5 6 78 9)在上次new的那个Scanner对象中,这次new的Scanner对象读取的是新的输入。
不知道你是怎么得出5 6也被保存到了二维数组positions中?第一次调用getOnePoint方法只把3和4放进去了,后面的5 6 78 9随着第一次调用的getOnePoint方法结束永远的消失在无法访问的内存中了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询