A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lijiy09 中级黑马   /  2016-3-18 20:52  /  1954 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static void main(String[] args) {   
      Scanner sc = new Scanner(System.in);
      ArrayList<Integer> array = new ArrayList<Integer>();
  
      while(true){
             System.out.println("请输入数据");
             int number =sc.nextInt();
             if(number!=0){
             array.add(number);
            }else{
             break;
            }
      }
  
      Integer[] i = new Integer[array.size()];
      array.toArray(i);
      Arrays.sort(i);
      System.out.println("最大值为"+i[i.length-1]);
}
-------------------------------------------------------------------------------------
public static void main(String[] args) {   
      ArrayList<Integer> array = new ArrayList<Integer>();
  
      while(true){
             Scanner sc = new Scanner(System.in);
             System.out.println("请输入数据");
             int number =sc.nextInt();
             if(number!=0){
             array.add(number);
            }else{
             break;
            }
      }
  
      Integer[] i = new Integer[array.size()];
      array.toArray(i);
      Arrays.sort(i);
      System.out.println("最大值为"+i[i.length-1]);
}
这里把Scanner sc = new Scanner(System.in);分别放在while语句外面和里面,并不影响结果,放在外面时,只创建一次对象,但为什么当进行while语句循环时都可以存储一个输入数据,和每次在while里面创建对象是等效的吗?求解?

10 个回复

倒序浏览
因为你是通过sc调用Scanner类的方法,方法可以反复调用
回复 使用道具 举报
显然不一样啊,只要是new 就会创建新的对象, Scanner sc = new Scanner(System.in);放循环里面代表每次都是新的键盘录入对象,这样会在内存中有很多垃圾.
回复 使用道具 举报
一次就可以吧,可以循环录入的吧
回复 使用道具 举报
Scanner sc = new Scanner(System.in只在本类方法中有效
回复 使用道具 举报
嗯,谢谢解答,我明白了~
回复 使用道具 举报
Scanner 创建对象,实际上是 输入流的 创建,将sc关联到你的键盘输入
就相当于创建了一个连接键盘和 Scanner对象的一个通道
通道不关闭,你再创建同样的通道是没有意义的,Scanner对象被创建多次的操作时无效的,
之后通过对象的方法来接收键盘的数据
Scanner 创建的对象也是可以被关闭的 .close()方法,
但一般不会关闭,因为关闭后再次创建sc对象会出错(Scanner对象只能被创建一次)

回复 使用道具 举报 1 0
就是我 发表于 2016-3-19 11:14
Scanner 创建对象,实际上是 输入流的 创建,将sc关联到你的键盘输入
就相当于创建了一个连接键盘和 Scanner ...

正解 Scanner被多次创建无效。但是有没有大神来说说到运行期,虚拟机是怎么处理在循环内的新建scanner代码的呢?
回复 使用道具 举报
签到 随便看看回复贴
回复 使用道具 举报
willsame 来自手机 中级黑马 2016-3-19 11:57:55
10#
我是来看评论的,可还是没看懂
回复 使用道具 举报
scanner对象只能创建一次,多次创建会不会报错?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马