前言
众所周知,壹哥在干Java的路上已经越走越远,越陷越深,最近无意刷知乎时看到一位初学Java的迷惑少年,被报错干懵啦!!!
初学Java的同学,遇到报错一定不要慌,首先检查一下自己的代码,有没有手误造成的错误,然后看一下逻辑上有没有问题,接下来壹哥就带你看一下这位同学遇到的问题,自查一下你是否遇到过类似的情况呢?!
一. 异常现象
首先,问题提出甩出了两张截图,不知道有同学在不看老师讲解的时候能否看懂报错的原因呢?
问题所在:
初学Java的小伙伴们,大家快来围观啊,看看下面的问题:
二. 异常原因
其实这个问题!就是命名导致的问题!怎么个意思?命名还能导致问题?
给你举个例子:今天我跟我老婆讨论去谁家过年的问题。
我:老婆,我妈问咱们,今年是在我妈这过年,还是去你妈那过年。
老婆:(很生气)......你什么意思,咱们都结了婚了,你还跟我分你妈、我妈?!都是咱妈!!!给你重新组织语言的机会!
我:(汗).......好好。那我说了哈,咱妈问咱们,今天是在咱家过年,还是在咱妈家过年。如果咱们在咱妈家过年,咱妈就提前准备点东西,让咱们带过去。如果咱们在咱妈家过年,咱们也准备点东西,让咱们给咱妈提前送过去。你定,咱们去哪个妈家过年,嘿嘿.......
以上代码中问题的产生原因,其实就是题主自己的定义的Scanner类名(咱妈),与Java自身的 java.util.Scanner(咱妈) 命名重名造成的问题!
三. 解决办法
那这个问题该如何解决呢?很简单,如下:
Java中定义的类名是Scanner,那么在本类中使用时,默认这个Scanner就是你自己定义的Scanner。因为类中默认有一个空参的构造器,所以,去掉System.in即可!
如果你本意是使用jdk自带的Scanner输入管理对象,那么请加定语,即代码写成如下形式:
java.util.Scanner sc = new java.util.Scanner(System.in);
或者修改本类的类名,不要与系统自带的类名相同,这样最简单。
现在你知道该怎么解决这个问题了吗?