我要建立一个宠物商店- =先建立一个animal类package pethome;public class Animal { private int age; private String name ; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void show(){ System.out.println(getAge()+"\t"+getName()); }} 然后开始写主函数package pethome;import java.util.*;public class Demo { public static void main(String[] args) { Scanner in=new Scanner(System.in); Animal[] animal=new Animal[9]; int k=0; System.out.println("welcome to the pethome! What do you want to do ? "); while(true) { System.out.println("1.add the pet"); System.out.println("2.delete the pet"); for(int i=0;i<9 ;i++){ if(animal[i]!=null){ animal[i].show(); System.out.println("\n"); } } int a=in.nextInt(); switch(a){ case 1: System.out.println("please inset the name "); String b=in.nextLine(); animal[k].setName(b); System.out.println("please inset the age"); int c=in.nextInt(); animal[k].setAge(c); k++; break; } } }} 这个程序我没做完,想测试一下第一个添加宠物的函数。问题是在这里,这是我的运行界面welcome to the pethome! What do you want to do ? 1.add the pet2.delete the pet1please inset the name Exception in thread "main" java.lang.NullPointerException at pethome.Demo.main(Demo.java:27)说我的animal[]数组没有内存,b和c的值并没有录入到animal【0】的name和age里!求大神解答
4 回答
大水萝卜
TA贡献13条经验 获得超9个赞
Scanner类中nextInt()方法,在遇到第一个分隔符(换行或空格)会结束扫描,这个时候,程序读取的是分隔符之前的数据,并不包括分隔符。
所以,当之后的nextLine()方法扫描时,会第一个扫描到你在nextInt()方法输入时,输入的最后一个分隔符,这个时候nextLine()方法就会结束扫描。所以你后面就无法再输入数据了。
简单的讲,nextInt()方法读取了你输入的“1”,而接下来的nextLine()方法读取了你输入的“1”之后的回车键。而它读到回车键就认为读取已经结束了。
关于这个问题,你可以去网上搜索一下Scanner类的next()与nextLine()的区别
有不足的地方,欢迎指正,共同进步
添加回答
举报
0/150
提交
取消