zoukankan      html  css  js  c++  java
  • 如何用定长数组存放不定个数的数据并避免空指针异常?

    1. 问题:用一个定长数组存放学生信息,并且能输出学生信息
    2. 注意:如果定长数组没存满,遍历的时候就会出现空指针异常,如何避免呢?
    3. 解决办法:控制循环条件,不完全遍历,只遍历值不为空的情况,添加数据的时候,记录添加次数,作为循环遍历的次数
    4. 代码如下:
    5. ***********************工人类************************
    6. package com.xtkj.javaProgram;
    7. import java.util.Scanner;
    8. public class Worker {
    9. private int id;
    10. private String name;
    11. private int age;
    12. private double salary;
    13. Worker(){
    14. this.id = id;
    15. this.name = name;
    16. this.age = age;
    17. this.salary = salary;
    18. }
    19. public int getId() {
    20. return id;
    21. }
    22. public void setId(int id) {
    23. this.id = id;
    24. }
    25. public String getName() {
    26. return name;
    27. }
    28. public void setName(String name) {
    29. this.name = name;
    30. }
    31. public int getAge() {
    32. return age;
    33. }
    34. public void setAge(int age) {
    35. this.age = age;
    36. }
    37. public double getSalary() {
    38. return salary;
    39. }
    40. public void setSalary(double salary) {
    41. this.salary = salary;
    42. }
    43. }
    44. ********************************方法类******************************
    45. package com.xtkj.javaProgram;
    46. import java.util.Scanner;
    47. public class Do {
    48. Worker []a=new Worker[50];// 定义一个Worker类型的数组,长度为50
    49. int i=0;//在方法外部 定义一个变量,记录添加的次数
    50. int notexist=0;
    51. Scanner sc=new Scanner(System.in );
    52. //添加
    53. void add(){
    54. System.out.println("请输入新员工的员工号、姓名、年龄和工资:");
    55. Worker wr=new Worker();
    56. a[i]=wr;//每一次添加都实例化一个对象,并以把对象存入到数组a中
    57. int id=sc.nextInt();
    58. a[i].setId(id);
    59. String name=sc.next();
    60. a[i].setName(name);
    61. int age=sc.nextInt();
    62. a[i].setAge(age);
    63. double salary=sc.nextDouble();
    64. a[i].setSalary(salary);
    65. System.out.println("**********添加成功***********");
    66. i++;//做标记,记录数组下标
    67. }
    68. //按员工号查询
    69. void find(){
    70. System.out.println("请输入员工的员工号:");
    71. int id=sc.nextInt();
    72. for(int j=0;j<i;j++){
    73. if(a[j].getId()==id){
    74. System.out.println("所查员工信息为:");
    75. System.out.println("员工号:"+a[j].getId()+" 姓名:"+a[j].getName()
    76. +" 年龄:"+a[j].getAge()+" 工资"+a[j].getSalary());
    77. notexist=1;
    78. }
    79. }
    80. if(notexist!=1){
    81. System.out.println("查无此人");
    82. }
    83. }
    84. //显示所有员工信息
    85. void showAll(){
    86. System.out.println("员工的员工号、姓名、年龄和工资如下:");
    87. for(int j=0;j<i;j++){//循环次数以数组啊[i]de 下标为准,不是数组长度,否则会空指针异常
    88. System.out.println("员工号:"+a[j].getId()+" 姓名:"+a[j].getName()
    89. +" 年龄:"+a[j].getAge()+" 工资"+a[j].getSalary());
    90. }
    91. }
    92. //修改薪水
    93. void updatesal(){
    94. System.out.println("请输入要修改的员工的员工号和修改之后的工资:");
    95. int id=sc.nextInt();
    96. double salary=sc.nextDouble();
    97. for(int j=0;j<i;j++){
    98. if(a[j].getId()==id){
    99. System.out.println("该员工信息为:");
    100. System.out.println("员工号:"+a[j].getId()+" 姓名:"+a[j].getName()
    101. +" 年龄:"+a[j].getAge()+" 工资"+a[j].getSalary());
    102. notexist=1;
    103. a[j].setSalary(salary);
    104. System.out.println("修改后员工信息为:");
    105. System.out.println("员工号:"+a[j].getId()+" 姓名:"+a[j].getName()
    106. +" 年龄:"+a[j].getAge()+" 工资"+a[j].getSalary());
    107. }
    108. }
    109. if(notexist!=1){
    110. System.out.println("查无此人");
    111. }
    112. System.out.println("******************************修改成功!*******************************");
    113. }
    114. *****************************主类************************************************************
    115. public class Main {
    116. public static void main(String[] args) {
    117. Do d=new Do();
    118. boolean b=true;
    119. while(b){//通过while循环,控制循环条件一直为true,每次switch语句跳出后,都立刻回到主菜单
    120. System.out.println("*********************欢迎进入职员薪水管理系统***********************");
    121. System.out.println("请选择以下操作:");
    122. System.out.println("1.添加新员工");
    123. System.out.println("2.查询员工信息");
    124. System.out.println("3.显示所有员工信息");
    125. System.out.println("4.修改员工薪水");
    126. Scanner reader=new Scanner(System.in );
    127. int choice=reader.nextInt();
    128. switch(choice){
    129. case 1:
    130. d.add();
    131. break;
    132. case 2:{
    133. d.find();
    134. }
    135. break;
    136. case 3:
    137. d.showAll();
    138. break;
    139. case 4:
    140. d.updatesal();
    141. break;
    142. default:{
    143. System.out.println("您的输入有误,请从新输入:");
    144. }
    145. }
    146. }
    147. }
    148. }
  • 相关阅读:
    图片圆角
    ios三张图片组合一张
    使用atomic一定是线程安全的吗?
    webservice异常
    Spring AOP中pointcut expression表达式解析 及匹配多个条件
    spring和mybatis的整合配置
    spring4配置文件详解
    MyBatis的接口式编程Demo
    关于中国电信天翼开放平台短信接口的一些使用
    HttpInvoker http请求工具类
  • 原文地址:https://www.cnblogs.com/yangyi9343/p/4749383.html
Copyright © 2011-2022 走看看