关于《全国计算机等级考试二级教程(Java语言程序设计)(2019年版)》中的一些代码错误的纠正

       本人是Java语言的初学者,并且买了《全国计算机等级考试二级教程(Java语言程序设计)》这本教材,想通过自己的努力自学Java语言并通过国二考试,但是这本教材中的程序案例屡屡出现错误,让我这个初学者非常痛苦,这也说明了这些教材编写者的疏忽大意。我通过上网大量的搜索和学习,纠正了教材中的一些错误代码段,在这里分享给那些要考国二java考试并且买了这本教材的考生们。还有国二用的是jdk6,如果用别的版本运行,可能会出现一些错误,建议大家不要用别版本去学国二教材。

1.

80页

由于未导入相关方法包使程序运行错误。

书中原代码:例5.6 ObjectTest.java

 1 public class ObjectTest 
 2 {
 3     public static void main(String[] args) 
 4     {
 5         Employee zhang1=new Employee("张浩",75000,1987,12,15);
 6         Employee zhang2=zhang1;
 7         Employee zhang3=new Employee("张浩",75000,1987,12,15);
 8         Employee bob=new Employee("Bob Brandson",50000,1989,10,1);
 9         System.out.println("zhang1==zhang2:"+(zhang1==zhang2));
10         System.out.println("zhang1==zhang3:"+(zhang1==zhang3));
11         System.out.println("zhang1.equals(zhang3):"+zhang1.equals(zhang3));
12         System.out.println("zhang1.equals(bob):"+zhang1.equals(bob));
13         System.out.println("bob.toString():"+bob);
14         Manager carl=new Manager("Carl Cracker",80000,1987,12,15);
15         Manager boss=new Manager("Carl Cracker",80000,1987,12,15);
16         boss.setBonus(5000);
17         System.out.println("boss.toString():"+boss);
18         System.out.println("carl.equals(boss):"+carl.equals(boss));
19         System.out.println("zhang1.hashCode():"+zhang1.hashCode());
20         System.out.println("zhang3.hashCode():"+zhang3.hashCode());
21         System.out.println("bob.hashCode():"+bob.hashCode());
22         System.out.println("carl.hashCode():"+carl.hashCode());
23         System.out.println("boss.hashCode():"+boss.hashCode());
24     }
25 }
26 class Employee
27 {
28     
29     public Employee(String n,double s,int year,int month,int day)
30     {
31         name=n;
32         salary=s;
33         GregorianCalendar calendar=new GregorianCalendar(year,month-1,day);
34         hireDay=calendar.getTime();
35     }
36     public boolean equals(Object otherObject)
37     {
38         if(this==otherObject)return true;
39         if(otherObject==null)return false;
40         if(getClass()!=otherObject.getClass())return false;
41         Employee other=(Employee)otherObject;
42         return name.equals(other.name)&&salary==other.salary&&hireDay.equals(other.hireDay);
43     }
44     public int hashCode()
45     {
46         return 7*name.hashCode()+11*new Double(salary).hashCode()+13*hireDay.hashCode();
47     }
48     public String toString()
49     {
50         return getClass().getName()+"[name="+name+",salary="+salary+",hireDay="+hireDay+"]";
51     }
52     private String name;
53     private double salary;
54     private Date hireDay;
55 }
56 class Manager extends Employee
57 {
58     public Manager(String n,double s,int year,int month,int day)
59     {
60         super(n,s,year,month,day);
61         bonus=0;
62     }
63     public void setBonus(double b)
64     {
65         bonus=b;
66     }
67     public boolean equals(Object otherObject)
68     {
69         if(!super.equals(otherObject))
70             return false;
71         Manager other=(Manager)otherObject;
72         return bonus==other.bonus;
73     }
74     public int hashCode()
75     {
76         return super.hashCode()+17*new Double(bonus).hashCode();
77     }
78     public String toString()
79     {
80         return super.toString()+"[bonus="+bonus+"]";
81     }
82     private double bonus;
83 }

本人纠正后代码:

只是在代码开头导入包,加入两行代码即可,

 1 import java.util.GregorianCalendar;
 2 import java.util.Date;
 3 public class ObjectTest 
 4 {
 5     public static void main(String[] args) 
 6     {
 7         Employee zhang1=new Employee("张浩",75000,1987,12,15);
 8         Employee zhang2=zhang1;
 9         Employee zhang3=new Employee("张浩",75000,1987,12,15);
10         Employee bob=new Employee("Bob Brandson",50000,1989,10,1);
11         System.out.println("zhang1==zhang2:"+(zhang1==zhang2));
12         System.out.println("zhang1==zhang3:"+(zhang1==zhang3));
13         System.out.println("zhang1.equals(zhang3):"+zhang1.equals(zhang3));
14         System.out.println("zhang1.equals(bob):"+zhang1.equals(bob));
15         System.out.println("bob.toString():"+bob);
16         Manager carl=new Manager("Carl Cracker",80000,1987,12,15);
17         Manager boss=new Manager("Carl Cracker",80000,1987,12,15);
18         boss.setBonus(5000);
19         System.out.println("boss.toString():"+boss);
20         System.out.println("carl.equals(boss):"+carl.equals(boss));
21         System.out.println("zhang1.hashCode():"+zhang1.hashCode());
22         System.out.println("zhang3.hashCode():"+zhang3.hashCode());
23         System.out.println("bob.hashCode():"+bob.hashCode());
24         System.out.println("carl.hashCode():"+carl.hashCode());
25         System.out.println("boss.hashCode():"+boss.hashCode());
26     }
27 }
28 class Employee
29 {
30     
31     public Employee(String n,double s,int year,int month,int day)
32     {
33         name=n;
34         salary=s;
35         GregorianCalendar calendar=new GregorianCalendar(year,month-1,day);
36         hireDay=calendar.getTime();
37     }
38     public boolean equals(Object otherObject)
39     {
40         if(this==otherObject)return true;
41         if(otherObject==null)return false;
42         if(getClass()!=otherObject.getClass())return false;
43         Employee other=(Employee)otherObject;
44         return name.equals(other.name)&&salary==other.salary&&hireDay.equals(other.hireDay);
45     }
46     public int hashCode()
47     {
48         return 7*name.hashCode()+11*new Double(salary).hashCode()+13*hireDay.hashCode();
49     }
50     public String toString()
51     {
52         return getClass().getName()+"[name="+name+",salary="+salary+",hireDay="+hireDay+"]";
53     }
54     private String name;
55     private double salary;
56     private Date hireDay;
57 }
58 class Manager extends Employee
59 {
60     public Manager(String n,double s,int year,int month,int day)
61     {
62         super(n,s,year,month,day);
63         bonus=0;
64     }
65     public void setBonus(double b)
66     {
67         bonus=b;
68     }
69     public boolean equals(Object otherObject)
70     {
71         if(!super.equals(otherObject))
72             return false;
73         Manager other=(Manager)otherObject;
74         return bonus==other.bonus;
75     }
76     public int hashCode()
77     {
78         return super.hashCode()+17*new Double(bonus).hashCode();
79     }
80     public String toString()
81     {
82         return super.toString()+"[bonus="+bonus+"]";
83     }
84     private double bonus;
85 }

2.

86页例5.9 EnumTest.java这个程序是有问题的,但是我还没改过来,有改过来的希望给留言一下,教教我啊。

书中原码:

EnumTest.java

 1 import java.util.*;
 2 public class EnumTest 
 3 {
 4     public static void main(String[] args) 
 5     {
 6         Scanner in=new Scanner(System.in);
 7         System.out.print("请输入服装号:(SMALL,MEDIUM,LARGE,EXTRA_LARGE,EXTRA_EXTRA_LARGE)");
 8         String input=in.next().toUpperCase();
 9         Size size=Enum.valueOf(Size.class,input);
10         System.out.println("size="+size);
11         System.out.println("abbreviation="+Size.getAbbreviation());
12         if(size==Size.EXTRA_LARGE^size==Size.EXTRA_EXTRA_LARGE)
13         {
14             System.out.println("很好!你注意到了下划线“_”。");
15         }
16     }
17     enum Size{SMALL("S"),MEDIUM("M"),LARGE("L"),EXTRA_LARGE("XL"),EXTRA_EXTRA_LARGE("XXL")};
18     private Size(String abbreviation)
19     {
20         this.abbreviation=abbreviation;
21     }
22     public String getAbbreviation()
23     {
24         return abbreviation;
25     }
26     private String abbreviation;
27 }

3.

129页,例7.3 ZipTest.java

其中两行代码可能是书写有误,我也没看懂啥意思,最后在网上查资料改了过来。

本人修正后代码:

 

  1 import java.awt.*;
  2 import java.awt.event.*;
  3 import java.io.*;
  4 import java.util.*;
  5 import java.util.List;
  6 import java.util.zip.*;
  7 import javax.swing.*;
  8 public class ZipTest {
  9 
 10     public static void main(String[] args) {
 11         // TODO Auto-generated method stub
 12         EventQueue.invokeLater(new Runnable() {
 13             public void run() {
 14                 ZipTestFrame frame=new ZipTestFrame();
 15                 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 16                 frame.setVisible(true);
 17             }
 18         });
 19     }
 20 
 21 }
 22 class ZipTestFrame extends JFrame{
 23     /**
 24      * 
 25      */
 26     private static final long serialVersionUID = 1L;
 27     public ZipTestFrame() {
 28         setTitle("ZipTest");
 29         setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
 30         JMenuBar menuBar=new JMenuBar();
 31         JMenu menu=new JMenu("File");
 32         JMenuItem openItem=new JMenuItem("Open");
 33         menu.add(openItem);
 34         openItem.addActionListener(new ActionListener(){
 35             public void actionPerformed(ActionEvent event) {
 36                 JFileChooser chooser=new JFileChooser();
 37                 chooser.setCurrentDirectory(new File("."));
 38                 int r=chooser.showOpenDialog(ZipTestFrame.this);
 39                 if(r==JFileChooser.APPROVE_OPTION) {
 40                     zipname=chooser.getSelectedFile().getPath();
 41                     fileCombo.removeAllItems();
 42                     scanZipFile();
 43                 }
 44             }
 45         });
 46         JMenuItem exitItem=new JMenuItem("Exit");
 47         menu.add(exitItem);
 48         exitItem.addActionListener(new ActionListener() {
 49             public void actionPerformed(ActionEvent event) {
 50                 System.exit(0);
 51             }
 52         });
 53         menuBar.add(menu);
 54         setJMenuBar(menuBar);
 55         fileText=new JTextArea();
 56         fileCombo=new JComboBox();
 57         fileCombo.addActionListener(new ActionListener() {
 58             public void actionPerformed(ActionEvent event) {
 59                 loadZipFile((String)fileCombo.getSelectedItem());
 60             }
 61         });
 62         add(fileCombo,BorderLayout.SOUTH);
 63         add(new JScrollPane(fileText),BorderLayout.CENTER);
 64     }
 65     public void scanZipFile() {
 66         new SwingWorker<Void,String>(){
 67             protected Void doInBackground()throws Exception{
 68                 ZipInputStream zin=new ZipInputStream(new FileInputStream(zipname));
 69                 ZipEntry entry;
 70                 while((entry=zin.getNextEntry())!=null) {
 71                     publish(entry.getName());
 72                     zin.closeEntry();
 73                 }
 74                 zin.close();
 75                 return null;
 76             }
 77             protected void process(List<String> names) {
 78                 for(String name:names)fileCombo.addItem(name);
 79             }
 80         }.execute();
 81     }
 82     public void loadZipFile(final String name) {
 83         fileCombo.setEnabled(false);
 84         fileText.setText("");
 85         new SwingWorker<Void,Void>(){
 86             protected Void doInBackground()throws Exception{
 87                 try {
 88                     ZipInputStream zin = new ZipInputStream(new FileInputStream(zipname));
 89                     ZipEntry entry;                    
 90                     while((entry=zin.getNextEntry())!=null) {
 91                         if(entry.getName().equals(name)) {
 92                             Scanner in=new Scanner(zin);
 93                             while(in.hasNextLine()) {
 94                                 fileText.append(in.nextLine());
 95                                 fileText.append("\n");
 96                             }
 97                         }
 98                         zin.closeEntry();
 99                     }
100                     zin.close();
101                 }
102                 catch(IOException e) {
103                     e.printStackTrace();
104                 }
105                 return null;
106             }
107             protected void done() {
108                 fileCombo.setEnabled(true);
109             }
110         }.execute();
111     }
112     protected void ZipInputStream(FileInputStream fileInputStream) {
113         // TODO Auto-generated method stub
114         
115     }
116     public static final int DEFAULT_WIDTH=400;
117     public static final int DEFAULT_HEIGHT=300;
118     private JComboBox fileCombo;
119     private JTextArea fileText;
120     private String zipname;
121 }

 

由于我书还没看完,先找到这基础错误,待我发现新的错误后继续和大家分享讨论。

 

posted on 2019-08-14 18:40  ITMagic  阅读(1758)  评论(1)    收藏  举报

导航