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. }
  • 相关阅读:
    Study Plan The TwentySecond Day
    Study Plan The Nineteenth Day
    Study Plan The TwentySeventh Day
    Study Plan The Twentieth Day
    Study Plan The TwentyFirst Day
    python实现进程的三种方式及其区别
    yum makecache
    JSONPath 表达式的使用
    oracle执行cmd的实现方法
    php daodb插入、更新与删除数据
  • 原文地址:https://www.cnblogs.com/yangyi9343/p/4749383.html
Copyright © 2011-2022 走看看