java NoSuchElementException异常,求解答

imilano 2017-10-07 08:58:15
话不多说,代码如下:

package Que2;
import java.util.Scanner;

public class Que2Main {
public static void main(String[] args){
int n;
int fNum;
Scanner in=new Scanner(System.in);
System.out.print("请输入阶数n:");
while(!in.hasNextInt()){
System.out.println("输入出错,请重新输入阶数n:");
}
n=in.nextInt();
lowMat lm=new lowMat(n);
lm.assign();
fNum=in.nextInt(); //Exception in thread "main" java.util.NoSuchElementException
System.out.print("请输入要查找的数字:");
lm.find(fNum);
lm.outPut();
}
}

每次运行都会出现那个异常,不太懂问题到底出在哪里,
希望各位博友能指个方向。万分感谢。
...全文
1103 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
偏安zzcoder 2017-10-13
  • 打赏
  • 举报
回复
引用 17 楼 imilano 的回复:
[quote=引用 16 楼 kingslave1 的回复:] [quote=引用 15 楼 imilano 的回复:] [quote=引用 14 楼 kingslave1 的回复:] 然而我并没有上过他的课,你应该是认错人了吧。。。。
额,尴尬。可能是重名也说不定。[/quote] 张智超,这个名字重名的概率应该不是很大吧[/quote] 学长大四是吧?之前跟老师们发邮件找项目做?[/quote] 估计是碰巧他知道我名字了吧,但我还真的没跟他联系过,虽然确实想找项目做。。。。
imilano 2017-10-13
  • 打赏
  • 举报
回复
引用 16 楼 kingslave1 的回复:
[quote=引用 15 楼 imilano 的回复:] [quote=引用 14 楼 kingslave1 的回复:] 然而我并没有上过他的课,你应该是认错人了吧。。。。
额,尴尬。可能是重名也说不定。[/quote] 张智超,这个名字重名的概率应该不是很大吧[/quote] 学长大四是吧?之前跟老师们发邮件找项目做?
imilano 2017-10-11
  • 打赏
  • 举报
回复
引用 10 楼 kingslave1 的回复:
[quote=引用 9 楼 imilano 的回复:] [quote=引用 8 楼 kingslave1 的回复:] [quote=引用 7 楼 imilano 的回复:] [quote=引用 6 楼 kingslave1 的回复:] [quote=引用 5 楼 imilano 的回复:]
引用
倒数第二行,你的in.close()把标准输入流给关闭了,回到main方法时就不知道从哪里接收输入了,把in.close()这一句去掉就好
或是因为我基础没掌握好?
我想这应该用输入输出流的实现方法来解释吧,输入流对象的创建是用了设计模式中的装饰器模式,简单的说就是在原来对象的基础上加上了一些其他的东西,也就是说Scanner in=new Scanner(System.in);这句话执行后in这个引用指向的还是System.in这个对象本身,只不过是加了接收键盘输入的功能。当执行in.close()之后这个输入流对象关闭了,其他地方实际上也是使用的System.in这个对象,它被关闭了自然也就用不了了。 本人也是菜鸟,不过感觉这样解释应该是行得通的,若有纰漏,还请指正[/quote] 学长厉害了,说得真好。 想请教一下学长: 我现在大二,想在java方面做点东西,目前java的基本语法也学得差不多了,就是欠缺一些实践,所以目前在找一些实际项目的源码想看看。我看学长说什么设计模式之类的,就觉得自己还是欠缺好多,我看学长对java也挺擅长的,想问问学长有什么建议吗?比如一些学习资料的推荐什么的。[/quote] Java要看的书还是挺多的吧,我感觉基础会了以后再看一遍《Java编程思想》,读完这本书以后我想Java基础方面的东西就已经完完全全打牢了,然后可以试着读一下《深入理解Java虚拟机——JVM高级特性与最佳实践》,这是一本讲Java虚拟机原理的,也可以读一读《Java多线程编程核心技术》,这是专门讲多线程编程的。还可以再读一读《Effective Java》,有能力就读英文原版,因为中文版里有一点地方翻译不太合适。我想大一大二能读完这些东西就已经非常厉害了。这些东西越早接触越好,不然像我大三大四了才开始看这些书,就感觉大一大二学到的知识真的是连皮毛都算不上。除了Java相关的书,像数据库、操作系统、数据结构、算法之类的书也是有很多很经典的,对于计算机专业来说也是比较重要的,我现在就在读《深入理解计算机系统》。最后附上一张图 [/quote] 谢谢学长,我有《java核心技术 》,卷一已经基本看完了。但是感觉跟作者在思维上差得远,很多地方可能以一种别的思维理解会很容易,会觉得自己还是菜的很,总的说,觉得这本书不适合我这个阶段读,花费的时间太多,而得到的回报太少。《深入理解计算机系统》是本好书呐,写得真棒,可是还是觉得水平不够。所以学长觉得《Java编程思想》比《java核心技术 》更适合初学者?[/quote] 不是啊,我是说先入门了以后在看这本书。。。。[/quote] 额,心塞塞。哈哈哈,谢谢学长了啊,我今天从一位老师处听到了你的名字。说不定我们还有机会见面哦
偏安zzcoder 2017-10-11
  • 打赏
  • 举报
回复
引用 15 楼 imilano 的回复:
[quote=引用 14 楼 kingslave1 的回复:] 然而我并没有上过他的课,你应该是认错人了吧。。。。
额,尴尬。可能是重名也说不定。[/quote] 张智超,这个名字重名的概率应该不是很大吧
imilano 2017-10-11
  • 打赏
  • 举报
回复
引用 14 楼 kingslave1 的回复:
然而我并没有上过他的课,你应该是认错人了吧。。。。
额,尴尬。可能是重名也说不定。
偏安zzcoder 2017-10-11
  • 打赏
  • 举报
回复
然而我并没有上过他的课,你应该是认错人了吧。。。。
imilano 2017-10-11
  • 打赏
  • 举报
回复
引用 12 楼 kingslave1 的回复:
[quote=引用 11 楼 imilano 的回复:] [quote=引用 10 楼 kingslave1 的回复:] [quote=引用 9 楼 imilano 的回复:] [quote=引用 8 楼 kingslave1 的回复:] [quote=引用 7 楼 imilano 的回复:] [quote=引用 6 楼 kingslave1 的回复:] [quote=引用 5 楼 imilano 的回复:]
引用
倒数第二行,你的in.close()把标准输入流给关闭了,回到main方法时就不知道从哪里接收输入了,把in.close()这一句去掉就好
或是因为我基础没掌握好?
我想这应该用输入输出流的实现方法来解释吧,输入流对象的创建是用了设计模式中的装饰器模式,简单的说就是在原来对象的基础上加上了一些其他的东西,也就是说Scanner in=new Scanner(System.in);这句话执行后in这个引用指向的还是System.in这个对象本身,只不过是加了接收键盘输入的功能。当执行in.close()之后这个输入流对象关闭了,其他地方实际上也是使用的System.in这个对象,它被关闭了自然也就用不了了。 本人也是菜鸟,不过感觉这样解释应该是行得通的,若有纰漏,还请指正[/quote] 学长厉害了,说得真好。 想请教一下学长: 我现在大二,想在java方面做点东西,目前java的基本语法也学得差不多了,就是欠缺一些实践,所以目前在找一些实际项目的源码想看看。我看学长说什么设计模式之类的,就觉得自己还是欠缺好多,我看学长对java也挺擅长的,想问问学长有什么建议吗?比如一些学习资料的推荐什么的。[/quote] Java要看的书还是挺多的吧,我感觉基础会了以后再看一遍《Java编程思想》,读完这本书以后我想Java基础方面的东西就已经完完全全打牢了,然后可以试着读一下《深入理解Java虚拟机——JVM高级特性与最佳实践》,这是一本讲Java虚拟机原理的,也可以读一读《Java多线程编程核心技术》,这是专门讲多线程编程的。还可以再读一读《Effective Java》,有能力就读英文原版,因为中文版里有一点地方翻译不太合适。我想大一大二能读完这些东西就已经非常厉害了。这些东西越早接触越好,不然像我大三大四了才开始看这些书,就感觉大一大二学到的知识真的是连皮毛都算不上。除了Java相关的书,像数据库、操作系统、数据结构、算法之类的书也是有很多很经典的,对于计算机专业来说也是比较重要的,我现在就在读《深入理解计算机系统》。最后附上一张图 [/quote] 谢谢学长,我有《java核心技术 》,卷一已经基本看完了。但是感觉跟作者在思维上差得远,很多地方可能以一种别的思维理解会很容易,会觉得自己还是菜的很,总的说,觉得这本书不适合我这个阶段读,花费的时间太多,而得到的回报太少。《深入理解计算机系统》是本好书呐,写得真棒,可是还是觉得水平不够。所以学长觉得《Java编程思想》比《java核心技术 》更适合初学者?[/quote] 不是啊,我是说先入门了以后在看这本书。。。。[/quote] 额,心塞塞。哈哈哈,谢谢学长了啊,我今天从一位老师处听到了你的名字。说不定我们还有机会见面哦[/quote] 啥?你不是在逗我吧?[/quote]怎么会呢。嘿嘿,季一木老师。
偏安zzcoder 2017-10-11
  • 打赏
  • 举报
回复
引用 11 楼 imilano 的回复:
[quote=引用 10 楼 kingslave1 的回复:] [quote=引用 9 楼 imilano 的回复:] [quote=引用 8 楼 kingslave1 的回复:] [quote=引用 7 楼 imilano 的回复:] [quote=引用 6 楼 kingslave1 的回复:] [quote=引用 5 楼 imilano 的回复:]
引用
倒数第二行,你的in.close()把标准输入流给关闭了,回到main方法时就不知道从哪里接收输入了,把in.close()这一句去掉就好
或是因为我基础没掌握好?
我想这应该用输入输出流的实现方法来解释吧,输入流对象的创建是用了设计模式中的装饰器模式,简单的说就是在原来对象的基础上加上了一些其他的东西,也就是说Scanner in=new Scanner(System.in);这句话执行后in这个引用指向的还是System.in这个对象本身,只不过是加了接收键盘输入的功能。当执行in.close()之后这个输入流对象关闭了,其他地方实际上也是使用的System.in这个对象,它被关闭了自然也就用不了了。 本人也是菜鸟,不过感觉这样解释应该是行得通的,若有纰漏,还请指正[/quote] 学长厉害了,说得真好。 想请教一下学长: 我现在大二,想在java方面做点东西,目前java的基本语法也学得差不多了,就是欠缺一些实践,所以目前在找一些实际项目的源码想看看。我看学长说什么设计模式之类的,就觉得自己还是欠缺好多,我看学长对java也挺擅长的,想问问学长有什么建议吗?比如一些学习资料的推荐什么的。[/quote] Java要看的书还是挺多的吧,我感觉基础会了以后再看一遍《Java编程思想》,读完这本书以后我想Java基础方面的东西就已经完完全全打牢了,然后可以试着读一下《深入理解Java虚拟机——JVM高级特性与最佳实践》,这是一本讲Java虚拟机原理的,也可以读一读《Java多线程编程核心技术》,这是专门讲多线程编程的。还可以再读一读《Effective Java》,有能力就读英文原版,因为中文版里有一点地方翻译不太合适。我想大一大二能读完这些东西就已经非常厉害了。这些东西越早接触越好,不然像我大三大四了才开始看这些书,就感觉大一大二学到的知识真的是连皮毛都算不上。除了Java相关的书,像数据库、操作系统、数据结构、算法之类的书也是有很多很经典的,对于计算机专业来说也是比较重要的,我现在就在读《深入理解计算机系统》。最后附上一张图 [/quote] 谢谢学长,我有《java核心技术 》,卷一已经基本看完了。但是感觉跟作者在思维上差得远,很多地方可能以一种别的思维理解会很容易,会觉得自己还是菜的很,总的说,觉得这本书不适合我这个阶段读,花费的时间太多,而得到的回报太少。《深入理解计算机系统》是本好书呐,写得真棒,可是还是觉得水平不够。所以学长觉得《Java编程思想》比《java核心技术 》更适合初学者?[/quote] 不是啊,我是说先入门了以后在看这本书。。。。[/quote] 额,心塞塞。哈哈哈,谢谢学长了啊,我今天从一位老师处听到了你的名字。说不定我们还有机会见面哦[/quote] 啥?你不是在逗我吧?
imilano 2017-10-10
  • 打赏
  • 举报
回复
引用
倒数第二行,你的in.close()把标准输入流给关闭了,回到main方法时就不知道从哪里接收输入了,把in.close()这一句去掉就好
或是因为我基础没掌握好?
imilano 2017-10-10
  • 打赏
  • 举报
回复
引用 3 楼 kingslave1 的回复:
[quote=引用 2 楼 imilano 的回复:] [quote=引用 1 楼 kingslave1 的回复:] 楼主可以再把lowMat这个类的代码贴出来吗?
lowMat是一个下三角矩阵(很多地方写的不好,还望担待)。 本类的作用是实现下三角矩阵的赋值、输出以及指定元素的查找。lowMat代码如下:

package Que2;
import java.util.Scanner;
public class lowMat {
    private int n;
    private int conNum;
    private int num;
    private int[] lowMat;


    lowMat(int n){
        this.n=n;
        num=n*(n+1)/2+1;
        lowMat=new int[num];
    }
    public void assign(){
        int cnt=0;
        Scanner in=new Scanner(System.in);
        System.out.print("请输入常数C: ");
        while(!in.hasNextInt()) {
            System.out.println("无效输入,请重新输入:");
        }
        conNum=in.nextInt();
        System.out.println("请依次输入下三角的值:");
        while(in.hasNextInt()&&cnt<num-2) {
            lowMat[cnt] =in.nextInt();
            cnt++;
        }
        in.close();
        System.out.println("输入成功!");
    }
    public void find(int fNum){
        int i;
        int j;
        int k;
//        Scanner in1=new Scanner(System.in);
        boolean isFind=false;
//        while(!in.hasNextInt()) {
//            System.out.println("无效输入,请重新输入:");
        if(fNum==conNum)
            System.out.println("此数为常数C。");
        for(i=0;i<lowMat.length;i++){
            if(lowMat[i]==fNum){
                for(j=0;j<n;j++){
                    for(k=0;k<=j;k++){
                        if(j*n+k==i){
                            System.out.println("该数的位置为:("+j+","+k+")");
                            isFind=true;
                        }
                    }
                }
            }
        }
    if(!isFind)
        System.out.println("该数不存在。");
    }
    public void outPut(){
        int i;
        int j;
        int cnt=1;
        for(i=0;i<n;i++){
            for(j=0;j<=i;j++){
                System.out.print(lowMat[i*(i+1)/2+j]+"  ");
            }
         do{
                System.out.print(conNum+"  ");
         }while(cnt++<n-j);
            System.out.print("\n");
        }
    }
}



[/quote] 问题果然是处在这个文件里,

public void assign(){
        int cnt=0;
        Scanner in=new Scanner(System.in);
        System.out.print("请输入常数C: ");
        while(!in.hasNextInt()) {
            System.out.println("无效输入,请重新输入:");
        }
        conNum=in.nextInt();
        System.out.println("请依次输入下三角的值:");
        while(in.hasNextInt()&&cnt<num-2) {
            lowMat[cnt] =in.nextInt();
            cnt++;
        }
        in.close();
        System.out.println("输入成功!");
    }
倒数第二行,你的in.close()把标准输入流给关闭了,回到main方法时就不知道从哪里接收输入了,把in.close()这一句去掉就好[/quote] 哇,真的感谢。送花。 还想请教一下: in.close()是在lowMat那个类里,可出现异常的那个 fNum=in.nextInt()是在主函数中啊,而且我在类中和主函数中分别定义了两个输入流,应该是不会互相干扰的,就算把lowMat类中的输入流关了 ,对主函数中定义的输入流应该也没有影响的吧,可为什么会出现关闭一个影响另一个的情况?
偏安zzcoder 2017-10-10
  • 打赏
  • 举报
回复
引用 5 楼 imilano 的回复:
引用
倒数第二行,你的in.close()把标准输入流给关闭了,回到main方法时就不知道从哪里接收输入了,把in.close()这一句去掉就好
或是因为我基础没掌握好?
我想这应该用输入输出流的实现方法来解释吧,输入流对象的创建是用了设计模式中的装饰器模式,简单的说就是在原来对象的基础上加上了一些其他的东西,也就是说Scanner in=new Scanner(System.in);这句话执行后in这个引用指向的还是System.in这个对象本身,只不过是加了接收键盘输入的功能。当执行in.close()之后这个输入流对象关闭了,其他地方实际上也是使用的System.in这个对象,它被关闭了自然也就用不了了。 本人也是菜鸟,不过感觉这样解释应该是行得通的,若有纰漏,还请指正
imilano 2017-10-10
  • 打赏
  • 举报
回复
引用 1 楼 kingslave1 的回复:
楼主可以再把lowMat这个类的代码贴出来吗?
lowMat是一个下三角矩阵(很多地方写的不好,还望担待)。 本类的作用是实现下三角矩阵的赋值、输出以及指定元素的查找。lowMat代码如下:

package Que2;
import java.util.Scanner;
public class lowMat {
    private int n;
    private int conNum;
    private int num;
    private int[] lowMat;


    lowMat(int n){
        this.n=n;
        num=n*(n+1)/2+1;
        lowMat=new int[num];
    }
    public void assign(){
        int cnt=0;
        Scanner in=new Scanner(System.in);
        System.out.print("请输入常数C: ");
        while(!in.hasNextInt()) {
            System.out.println("无效输入,请重新输入:");
        }
        conNum=in.nextInt();
        System.out.println("请依次输入下三角的值:");
        while(in.hasNextInt()&&cnt<num-2) {
            lowMat[cnt] =in.nextInt();
            cnt++;
        }
        in.close();
        System.out.println("输入成功!");
    }
    public void find(int fNum){
        int i;
        int j;
        int k;
//        Scanner in1=new Scanner(System.in);
        boolean isFind=false;
//        while(!in.hasNextInt()) {
//            System.out.println("无效输入,请重新输入:");
        if(fNum==conNum)
            System.out.println("此数为常数C。");
        for(i=0;i<lowMat.length;i++){
            if(lowMat[i]==fNum){
                for(j=0;j<n;j++){
                    for(k=0;k<=j;k++){
                        if(j*n+k==i){
                            System.out.println("该数的位置为:("+j+","+k+")");
                            isFind=true;
                        }
                    }
                }
            }
        }
    if(!isFind)
        System.out.println("该数不存在。");
    }
    public void outPut(){
        int i;
        int j;
        int cnt=1;
        for(i=0;i<n;i++){
            for(j=0;j<=i;j++){
                System.out.print(lowMat[i*(i+1)/2+j]+"  ");
            }
         do{
                System.out.print(conNum+"  ");
         }while(cnt++<n-j);
            System.out.print("\n");
        }
    }
}



偏安zzcoder 2017-10-10
  • 打赏
  • 举报
回复
引用 2 楼 imilano 的回复:
[quote=引用 1 楼 kingslave1 的回复:] 楼主可以再把lowMat这个类的代码贴出来吗?
lowMat是一个下三角矩阵(很多地方写的不好,还望担待)。 本类的作用是实现下三角矩阵的赋值、输出以及指定元素的查找。lowMat代码如下:

package Que2;
import java.util.Scanner;
public class lowMat {
    private int n;
    private int conNum;
    private int num;
    private int[] lowMat;


    lowMat(int n){
        this.n=n;
        num=n*(n+1)/2+1;
        lowMat=new int[num];
    }
    public void assign(){
        int cnt=0;
        Scanner in=new Scanner(System.in);
        System.out.print("请输入常数C: ");
        while(!in.hasNextInt()) {
            System.out.println("无效输入,请重新输入:");
        }
        conNum=in.nextInt();
        System.out.println("请依次输入下三角的值:");
        while(in.hasNextInt()&&cnt<num-2) {
            lowMat[cnt] =in.nextInt();
            cnt++;
        }
        in.close();
        System.out.println("输入成功!");
    }
    public void find(int fNum){
        int i;
        int j;
        int k;
//        Scanner in1=new Scanner(System.in);
        boolean isFind=false;
//        while(!in.hasNextInt()) {
//            System.out.println("无效输入,请重新输入:");
        if(fNum==conNum)
            System.out.println("此数为常数C。");
        for(i=0;i<lowMat.length;i++){
            if(lowMat[i]==fNum){
                for(j=0;j<n;j++){
                    for(k=0;k<=j;k++){
                        if(j*n+k==i){
                            System.out.println("该数的位置为:("+j+","+k+")");
                            isFind=true;
                        }
                    }
                }
            }
        }
    if(!isFind)
        System.out.println("该数不存在。");
    }
    public void outPut(){
        int i;
        int j;
        int cnt=1;
        for(i=0;i<n;i++){
            for(j=0;j<=i;j++){
                System.out.print(lowMat[i*(i+1)/2+j]+"  ");
            }
         do{
                System.out.print(conNum+"  ");
         }while(cnt++<n-j);
            System.out.print("\n");
        }
    }
}



[/quote] 问题果然是处在这个文件里,

public void assign(){
        int cnt=0;
        Scanner in=new Scanner(System.in);
        System.out.print("请输入常数C: ");
        while(!in.hasNextInt()) {
            System.out.println("无效输入,请重新输入:");
        }
        conNum=in.nextInt();
        System.out.println("请依次输入下三角的值:");
        while(in.hasNextInt()&&cnt<num-2) {
            lowMat[cnt] =in.nextInt();
            cnt++;
        }
        in.close();
        System.out.println("输入成功!");
    }
倒数第二行,你的in.close()把标准输入流给关闭了,回到main方法时就不知道从哪里接收输入了,把in.close()这一句去掉就好
偏安zzcoder 2017-10-10
  • 打赏
  • 举报
回复
引用 9 楼 imilano 的回复:
[quote=引用 8 楼 kingslave1 的回复:] [quote=引用 7 楼 imilano 的回复:] [quote=引用 6 楼 kingslave1 的回复:] [quote=引用 5 楼 imilano 的回复:]
引用
倒数第二行,你的in.close()把标准输入流给关闭了,回到main方法时就不知道从哪里接收输入了,把in.close()这一句去掉就好
或是因为我基础没掌握好?
我想这应该用输入输出流的实现方法来解释吧,输入流对象的创建是用了设计模式中的装饰器模式,简单的说就是在原来对象的基础上加上了一些其他的东西,也就是说Scanner in=new Scanner(System.in);这句话执行后in这个引用指向的还是System.in这个对象本身,只不过是加了接收键盘输入的功能。当执行in.close()之后这个输入流对象关闭了,其他地方实际上也是使用的System.in这个对象,它被关闭了自然也就用不了了。 本人也是菜鸟,不过感觉这样解释应该是行得通的,若有纰漏,还请指正[/quote] 学长厉害了,说得真好。 想请教一下学长: 我现在大二,想在java方面做点东西,目前java的基本语法也学得差不多了,就是欠缺一些实践,所以目前在找一些实际项目的源码想看看。我看学长说什么设计模式之类的,就觉得自己还是欠缺好多,我看学长对java也挺擅长的,想问问学长有什么建议吗?比如一些学习资料的推荐什么的。[/quote] Java要看的书还是挺多的吧,我感觉基础会了以后再看一遍《Java编程思想》,读完这本书以后我想Java基础方面的东西就已经完完全全打牢了,然后可以试着读一下《深入理解Java虚拟机——JVM高级特性与最佳实践》,这是一本讲Java虚拟机原理的,也可以读一读《Java多线程编程核心技术》,这是专门讲多线程编程的。还可以再读一读《Effective Java》,有能力就读英文原版,因为中文版里有一点地方翻译不太合适。我想大一大二能读完这些东西就已经非常厉害了。这些东西越早接触越好,不然像我大三大四了才开始看这些书,就感觉大一大二学到的知识真的是连皮毛都算不上。除了Java相关的书,像数据库、操作系统、数据结构、算法之类的书也是有很多很经典的,对于计算机专业来说也是比较重要的,我现在就在读《深入理解计算机系统》。最后附上一张图 [/quote] 谢谢学长,我有《java核心技术 》,卷一已经基本看完了。但是感觉跟作者在思维上差得远,很多地方可能以一种别的思维理解会很容易,会觉得自己还是菜的很,总的说,觉得这本书不适合我这个阶段读,花费的时间太多,而得到的回报太少。《深入理解计算机系统》是本好书呐,写得真棒,可是还是觉得水平不够。所以学长觉得《Java编程思想》比《java核心技术 》更适合初学者?[/quote] 不是啊,我是说先入门了以后在看这本书。。。。
imilano 2017-10-10
  • 打赏
  • 举报
回复
引用 8 楼 kingslave1 的回复:
[quote=引用 7 楼 imilano 的回复:] [quote=引用 6 楼 kingslave1 的回复:] [quote=引用 5 楼 imilano 的回复:]
引用
倒数第二行,你的in.close()把标准输入流给关闭了,回到main方法时就不知道从哪里接收输入了,把in.close()这一句去掉就好
或是因为我基础没掌握好?
我想这应该用输入输出流的实现方法来解释吧,输入流对象的创建是用了设计模式中的装饰器模式,简单的说就是在原来对象的基础上加上了一些其他的东西,也就是说Scanner in=new Scanner(System.in);这句话执行后in这个引用指向的还是System.in这个对象本身,只不过是加了接收键盘输入的功能。当执行in.close()之后这个输入流对象关闭了,其他地方实际上也是使用的System.in这个对象,它被关闭了自然也就用不了了。 本人也是菜鸟,不过感觉这样解释应该是行得通的,若有纰漏,还请指正[/quote] 学长厉害了,说得真好。 想请教一下学长: 我现在大二,想在java方面做点东西,目前java的基本语法也学得差不多了,就是欠缺一些实践,所以目前在找一些实际项目的源码想看看。我看学长说什么设计模式之类的,就觉得自己还是欠缺好多,我看学长对java也挺擅长的,想问问学长有什么建议吗?比如一些学习资料的推荐什么的。[/quote] Java要看的书还是挺多的吧,我感觉基础会了以后再看一遍《Java编程思想》,读完这本书以后我想Java基础方面的东西就已经完完全全打牢了,然后可以试着读一下《深入理解Java虚拟机——JVM高级特性与最佳实践》,这是一本讲Java虚拟机原理的,也可以读一读《Java多线程编程核心技术》,这是专门讲多线程编程的。还可以再读一读《Effective Java》,有能力就读英文原版,因为中文版里有一点地方翻译不太合适。我想大一大二能读完这些东西就已经非常厉害了。这些东西越早接触越好,不然像我大三大四了才开始看这些书,就感觉大一大二学到的知识真的是连皮毛都算不上。除了Java相关的书,像数据库、操作系统、数据结构、算法之类的书也是有很多很经典的,对于计算机专业来说也是比较重要的,我现在就在读《深入理解计算机系统》。最后附上一张图 [/quote] 谢谢学长,我有《java核心技术 》,卷一已经基本看完了。但是感觉跟作者在思维上差得远,很多地方可能以一种别的思维理解会很容易,会觉得自己还是菜的很,总的说,觉得这本书不适合我这个阶段读,花费的时间太多,而得到的回报太少。《深入理解计算机系统》是本好书呐,写得真棒,可是还是觉得水平不够。所以学长觉得《Java编程思想》比《java核心技术 》更适合初学者?
偏安zzcoder 2017-10-10
  • 打赏
  • 举报
回复
引用 7 楼 imilano 的回复:
[quote=引用 6 楼 kingslave1 的回复:]
[quote=引用 5 楼 imilano 的回复:]
引用
倒数第二行,你的in.close()把标准输入流给关闭了,回到main方法时就不知道从哪里接收输入了,把in.close()这一句去掉就好

或是因为我基础没掌握好?

我想这应该用输入输出流的实现方法来解释吧,输入流对象的创建是用了设计模式中的装饰器模式,简单的说就是在原来对象的基础上加上了一些其他的东西,也就是说Scanner in=new Scanner(System.in);这句话执行后in这个引用指向的还是System.in这个对象本身,只不过是加了接收键盘输入的功能。当执行in.close()之后这个输入流对象关闭了,其他地方实际上也是使用的System.in这个对象,它被关闭了自然也就用不了了。

本人也是菜鸟,不过感觉这样解释应该是行得通的,若有纰漏,还请指正[/quote]
学长厉害了,说得真好。
想请教一下学长:
我现在大二,想在java方面做点东西,目前java的基本语法也学得差不多了,就是欠缺一些实践,所以目前在找一些实际项目的源码想看看。我看学长说什么设计模式之类的,就觉得自己还是欠缺好多,我看学长对java也挺擅长的,想问问学长有什么建议吗?比如一些学习资料的推荐什么的。[/quote]


Java要看的书还是挺多的吧,我感觉基础会了以后再看一遍《Java编程思想》,读完这本书以后我想Java基础方面的东西就已经完完全全打牢了,然后可以试着读一下《深入理解Java虚拟机——JVM高级特性与最佳实践》,这是一本讲Java虚拟机原理的,也可以读一读《Java多线程编程核心技术》,这是专门讲多线程编程的。还可以再读一读《Effective Java》,有能力就读英文原版,因为中文版里有一点地方翻译不太合适。我想大一大二能读完这些东西就已经非常厉害了。这些东西越早接触越好,不然像我大三大四了才开始看这些书,就感觉大一大二学到的知识真的是连皮毛都算不上。除了Java相关的书,像数据库、操作系统、数据结构、算法之类的书也是有很多很经典的,对于计算机专业来说也是比较重要的,我现在就在读《深入理解计算机系统》。最后附上一张图

imilano 2017-10-10
  • 打赏
  • 举报
回复
引用 6 楼 kingslave1 的回复:
[quote=引用 5 楼 imilano 的回复:]
引用
倒数第二行,你的in.close()把标准输入流给关闭了,回到main方法时就不知道从哪里接收输入了,把in.close()这一句去掉就好
或是因为我基础没掌握好?
我想这应该用输入输出流的实现方法来解释吧,输入流对象的创建是用了设计模式中的装饰器模式,简单的说就是在原来对象的基础上加上了一些其他的东西,也就是说Scanner in=new Scanner(System.in);这句话执行后in这个引用指向的还是System.in这个对象本身,只不过是加了接收键盘输入的功能。当执行in.close()之后这个输入流对象关闭了,其他地方实际上也是使用的System.in这个对象,它被关闭了自然也就用不了了。 本人也是菜鸟,不过感觉这样解释应该是行得通的,若有纰漏,还请指正[/quote] 学长厉害了,说得真好。 想请教一下学长: 我现在大二,想在java方面做点东西,目前java的基本语法也学得差不多了,就是欠缺一些实践,所以目前在找一些实际项目的源码想看看。我看学长说什么设计模式之类的,就觉得自己还是欠缺好多,我看学长对java也挺擅长的,想问问学长有什么建议吗?比如一些学习资料的推荐什么的。
偏安zzcoder 2017-10-09
  • 打赏
  • 举报
回复
楼主可以再把lowMat这个类的代码贴出来吗?

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧