关于java System.in的一个错误?

SelfMedicated 2012-03-13 11:51:49
下面的程序的作用是:给出n个整数,求出这n个整数中前k个最大的整数,比如:5个整数{5.9.1.3.2},前3个最大的整数是:{5.9.3}
然后我的程序出现了这样的错误(控制台输出!):

this is temp constructor!
Input n:
Exception in thread "main" java.lang.NullPointerException
at datastruct.Temp.setN(Temp.java:40)
at datastruct.Temp.<init>(Temp.java:17)
at datastruct.Temp.main(Temp.java:88)


import java.util.Scanner;

/*
* 给定n个整数,求出其中k个最大的数
*/
public class Temp {
private int k;
private int n;
private int[] intInputArray;
private int[] intSomeMaxNumbersArray;
private Scanner sca;

public Temp() {
System.out.println("this is temp constructor!");
this.setN();
this.setK();
this.intInputArray = new int[this.getN()];
this.intSomeMaxNumbersArray = new int[this.getK()];
this.initIntInputArray();
sca = new Scanner(System.in);
}

public int getK() {
return k;
}

public void setK() {
System.out.println("Input k:");
k = sca.nextInt();
}

public int getN() {
return n;
}

public void setN() {
System.out.println("Input n:");
n = sca.nextInt();
}

private void initIntInputArray() {
System.out.println("Input IntInputArray:");
for (int i = 0; i < this.getN(); i++) {
this.intInputArray[i] = sca.nextInt();
}
}

public void operation() {
int[] minNumAndIndex = new int[2];
for (int i = 0; i < this.getN(); i++) {
if (i < this.getK()) {
this.intSomeMaxNumbersArray[i] = this.intInputArray[i];
} else {
minNumAndIndex = this.getMinNumIndex();
if (minNumAndIndex[0] < this.intInputArray[i]) {
this.intSomeMaxNumbersArray[minNumAndIndex[1]] = this.intInputArray[i];
}
}
}
}

private int[] getMinNumIndex() {
int minIndex;
int min;
int[] minNumAndIndex = new int[2];
min = this.intSomeMaxNumbersArray[0];
minIndex = 0;
for (int i = 0; i < this.getK(); i++) {
if (min >= this.intSomeMaxNumbersArray[i]) {
min = this.intSomeMaxNumbersArray[i];
minIndex = i;
}
}
minNumAndIndex[0] = min;
minNumAndIndex[1] = minIndex;
return minNumAndIndex;
}

private void printResult() {
for (int i = 0; i < this.getK(); i++) {
System.out.println(this.intSomeMaxNumbersArray[i] + " ");
}
}

public static void main(String args[]) {
Temp temp = new Temp();
temp.operation();
temp.printResult();
}
}


...全文
157 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
nmyangym 2012-03-14
  • 打赏
  • 举报
回复
出错在:n = sca.nextInt();
这时 sca=null.
sca.netxInt() 出异常了。
nmyangym 2012-03-14
  • 打赏
  • 举报
回复
sca = new Scanner(System.in);
这条语句要前移,放在这落后于setN()了。
把它紧跟着放在 System.out.println("this is temp constructor!");
下面。
SelfMedicated 2012-03-14
  • 打赏
  • 举报
回复
我了个去啊,sorry,浪费各位老师的时间了,没有仔细观察就来这问问题了,以后一定仔细调试后在来问。
qybao 2012-03-14
  • 打赏
  • 举报
回复
this.setN(); //setN用到sca
this.setK();
this.intInputArray = new int[this.getN()];
this.intSomeMaxNumbersArray = new int[this.getK()];
this.initIntInputArray();
sca = new Scanner(System.in); //而sca在这里才初始化,所以setN就抛出空指针异常了
安特矮油 2012-03-14
  • 打赏
  • 举报
回复
在Temp构造器中调用this.setN时,scan还依然为null。所以在setN方法内用sca.nextInt();会包空指针的错误。
SelfMedicated 2012-03-13
  • 打赏
  • 举报
回复
有任何好的建议都欢迎提醒,不过关键还是这错误是怎么产生滴~~

50,526

社区成员

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

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