如果我将扫描仪对象传递给方法,扫描仪是否会从输入的开头扫描或继续扫描输入的剩余部分。这是我的代码:
public class Test {
public void test(Scanner sc) {
System.out.println(sc.nextLine());
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(str);
Test t = new Test(sc);
t.test();
}
}
// here is the input file:
1 2 3 4
5 6 7 8
9 1 2 3
我在Windows和Linux上都测试了这段代码,但我得到了两个不同的结果
第一个结果是在方法测试中,它打印5 6 7 8
第二个结果很难理解,它打印1 2 3 4,仍然是第一行的输入。
这与不同版本的Java有关,有人可以帮我解释一下,谢谢!
答案 0 :(得分:0)
扫描程序在两种方法中都是相同的对象 - 您正在传递对同一扫描程序的引用。因此,它无法从程序中的新位置使用它 - 如果调用相同的方法,无论使用什么代码,它都将忠实地执行相同的操作。
答案 1 :(得分:0)
首先,您的代码中存在错误>>测试t =新测试(sc)。它使用参数化构造函数,但我没有看到任何。
Q. if I pass a scanner object to a method, will the scanner scan from the beginning of
the input or continued to scan for the remaining part of the input ?
在Java中,对象通过Ref(引用对象堆地址)而不是值(如原始类型)传递。这就是为什么将Object传递给函数不会更改Object的原因。对象保持不变。
此致 拉维
答案 2 :(得分:0)
我认为您的问题必须the break line。
从一个操作系统到另一个操作系统以不同的方式定义新行。如果您打印
的值System.getProperty("line.separator");
您将在Windows和Linux中看到该属性的值不同。
我不知道您在哪里编写输入文件,但它可能包含特定于操作系统的行分隔符。当你在另一个操作系统上运行你的程序时,你会结束但结果不同。
我建议您像这样定义扫描仪文件的分隔符
sc .useDelimiter("\n|\r\n");
如果我没弄错的话, \ n 表示linux新行,而 \ r \ n 表示windows新行。