最近在刷题,准备校招! 对Scanner有一些不解; 有的时候空格代表了下个输入,有的时候无法读取! 当然了,正常输入是没有问题的。。。 结论是:
如果要一次性将数据输入(复制粘贴),Scanner实例定义在循环体外
@Test public void test() { int n=3; while(n>0){ Scanner input = new Scanner(System.in); int a=input.nextInt(); System.out.println("##"+a+"##"); n--; } }123 232 23 23 ::123:: 23 ::23:: 45 ::45::
在循环中通过连续输入空格隔开的方式无法全部读取;
此时我们想读取一行数据呢?
@Test public void test() { Scanner input = new Scanner(System.in); String a=input.nextLine(); System.out.println("::"+a+"::"); }123 234 456 ::123 234 456::
不是有个next()方法读取字符串吗?
@Test public void test() { Scanner input = new Scanner(System.in); String a=input.next(); System.out.println("::"+a+"::"); }123 23 232 89 ::123::
循环可以吗?
@Test public void test() { int n=3; while(n>0){ Scanner input = new Scanner(System.in); String a=input.next(); System.out.println("::"+a+"::"); n--; } }123 23 4545 67 ::123:: 23 34h 908 ::23:: fd fg hj ::fd::
@Test public void test() { int[] a=new int[4]; for(int i=0;i<4;i++){ Scanner input = new Scanner(System.in); a[i]=input.nextInt(); System.out.println("::"+a[i]+"::"); } }123 6 789 56 ::123:: 99 ::99::
123 45 78 2 ::123::
@Test public void test() { for(int i=0;i<4;i++){ Scanner input = new Scanner(System.in); String a=input.nextLine(); System.out.println("::"+a+"::"); } }123 45 78 2 ::123::
到这里感觉通过训话无法一次性将数据读取;
@Test public void test() { Scanner input = new Scanner(System.in); String a=input.nextLine(); System.out.println("::"+a+"::"); String b=input.nextLine(); System.out.println("::"+b+"::"); String c=input.nextLine(); System.out.println("::"+c+"::"); String d=input.nextLine(); System.out.println("::"+d+"::"); }123 45 78 2 ::123:: ::45:: ::78:: ::2::
这个就可以一次读取; 那么问题就来了,我的试题中也是循环但可以一次读取,比较后发现Scanner实例定义在循环体外。
@Test public void test() { Scanner input = new Scanner(System.in); for(int i=0;i<4;i++){ String nums = input.nextLine(); System.out.println("::"+nums+"::"); } }5 6 -1 5 4 -7 7 0 6 -1 1 -6 7 -5 5 6 -1 5 4 -7 7 0 6 -1 1 -6 7 -5 ::5 6 -1 5 4 -7:: ::7 0 6 -1 1 -6 7 -5:: ::5 6 -1 5 4 -7:: ::7 0 6 -1 1 -6 7 -5::