黑马程序员技术交流社区

标题: 求大神看看代码哪错了 [打印本页]

作者: 小黑子    时间: 2014-9-5 11:53
标题: 求大神看看代码哪错了
本帖最后由 小黑子 于 2014-9-6 15:10 编辑

好了,第一张图片的问题已经解决了,新的问题出来了,输入了两个CD信息,想法两个CD的信息全都打印出来,结果却是把第二次输入的CD信息打印了两遍,如图MyMedia2。这是怎么回事啊???
  1. /*
  2. 需求:使用数组保存CD信息,实现增、删、查、打印的功能
  3. 思想:1.建立一个CD类,存储CD基本信息
  4.         2、建立一个CDManager类,定义对CD的操作
  5.         3、建立一个MainInput类,定义一些信息输入的操作
  6. */

  7. import java.util.Vector;
  8. import java.io.*;
  9. //CD类
  10. class CD
  11. {
  12.         String cdid;
  13.         String cdname;
  14.         float price;
  15.         String press;

  16.         CD(){}
  17.         CD(String cdid,String cdname,float price,String press)
  18.         {
  19.                 this.cdid=cdid;
  20.                 this.cdname=cdname;
  21.                 this.price=price;
  22.                 this.press=press;
  23.         }

  24.         void setID(String cdid)
  25.         {
  26.                 this.cdid=cdid;
  27.         }
  28.         void setName(String cdname)
  29.         {
  30.                 this.cdname=cdname;
  31.         }
  32.         void setPrice(float price)
  33.         {
  34.                 this.price=price;
  35.         }
  36.         void setPress(String press)
  37.         {
  38.                 this.press=press;
  39.         }       
  40. }
  41. //定义对CD类的一些操作
  42. class CDManager
  43. {
  44.         Vector vec;
  45.         int count=0;

  46.         CDManager()
  47.         {
  48.                 vec = new Vector(50,1);
  49.         }
  50.        
  51.         public void addCD(CD c)                //添加CD
  52.         {
  53.                 //vec.addElement(c);
  54.                 vec.insertElementAt(c,count++);
  55.         }
  56.         public int findCDById(String id)//查找CD,按ID
  57.         {
  58.                 CD getcd = new CD();
  59.                 for(int i=0;i<vec.size();i++)
  60.                 {
  61.                         getcd = (CD) vec.elementAt(i);
  62.                         if(id == getcd.cdid)
  63.                         {
  64.                                 return i;
  65.                         }
  66.                 }
  67.                 return -1;
  68.         }
  69.         public int removeCDById(String id)//删除CD,按ID
  70.         {
  71.                 for(int i=0;i<vec.size();i++)
  72.                 {
  73.                         if(id == ((CD)vec.elementAt(i)).cdid)
  74.                         {       
  75.                                 vec.removeElementAt(i);
  76.                                 return 1;
  77.                         }
  78.                 }
  79.                 return -1;
  80.         }
  81.         public void printCD()//打印CD
  82.         {
  83.                 System.out.println("printCD over1");
  84.                 for(int i=0;i<vec.size();i++)
  85.                 {
  86.                         CD getcd = new CD();
  87.                         getcd = (CD) vec.elementAt(i);
  88.                         System.out.println("ID:"+getcd.cdid+"\tName: "+getcd.cdname+"\tPrice: "+getcd.price+"\tPress: "+getcd.press);
  89.                 }
  90.                 System.out.println("printCD over2");
  91.         }
  92. }

  93. //输入信息的一个类
  94. class MainInput
  95. {
  96.         public String inputstr()
  97.         {
  98.                 String pm = "";
  99.                 try
  100.                 {
  101.                         InputStreamReader reader = new InputStreamReader(System.in);
  102.                         BufferedReader input = new BufferedReader(reader);
  103.                         pm = input.readLine();
  104.                 }
  105.                 catch (IOException e)
  106.                 {
  107.                         System.out.println("IO Exception occur...");
  108.                 }
  109.                 return pm;
  110.         }
  111.         public void input(CDManager cm)
  112.         {
  113.                 int gate=0;//接收输入的选项
  114.                 String str;//接收输入的字符串
  115.                 float flo;//接收输入的价格
  116.                 CD getcd = new CD();
  117.                 System.out.println("---------------Welcome to Media Manage System---------------");
  118. lab_wl:        while(true)
  119.                 {
  120.                         System.out.println("1. add CD");
  121.                         System.out.println("2. find CD by ID");
  122.                         System.out.println("3. remove CD by ID");
  123.                         System.out.println("0. exit system");
  124.                         System.out.println("Enter your choose: ");
  125.                         try
  126.                         {
  127.                                 gate = Integer.parseInt(inputstr());
  128.                         }
  129.                         catch (NumberFormatException e)
  130.                         {
  131.                                 System.out.println("invalid data format...");
  132.                         }
  133.                        
  134.                         switch(gate)
  135.                         {
  136.                                 case 1:
  137.                                         System.out.println("Enter CD ID: ");
  138.                                         str = inputstr();
  139.                                         getcd.cdid = str;
  140.                                         System.out.println("Enter cd name: ");
  141.                                         str = inputstr();
  142.                                         getcd.cdname = str;                                       
  143.                                         while(true)
  144.                                         {//此循环用于保证输入float错误可以重新输入
  145.                                                 System.out.println("Enter price: ");
  146.                                                 try
  147.                                                 {
  148.                                                         flo = Float.parseFloat(inputstr());
  149.                                                         getcd.price = flo;
  150.                                                         break;
  151.                                                 }
  152.                                                 catch (NumberFormatException e)
  153.                                                 {
  154.                                                         System.out.println("invalid data format...");
  155.                                                 }
  156.                                                
  157.                                         }
  158.                                         System.out.println("Enter press: ");
  159.                                         str = inputstr();
  160.                                         getcd.press = str;

  161.                                         cm.addCD(getcd);
  162.                                         break;
  163.                                 case 0:
  164.                                         break lab_wl;
  165.                                 default: break;
  166.                         }//end of switch               
  167.                 }//end of while               
  168.         }
  169. }
  170. class MyMediaDemo
  171. {
  172.         public static void main(String[] args)
  173.         {
  174.                 CDManager cm = new CDManager();
  175.                 MainInput mi = new MainInput();
  176.                 mi.input(cm);
  177.                 cm.printCD();
  178.         }
  179. }
复制代码



MyMediaDemo.png (63.86 KB, 下载次数: 0)

MyMediaDemo.png

MyMedia2.png (3.35 KB, 下载次数: 5)

MyMedia2.png

作者: yuZhe_toString    时间: 2014-9-5 12:11
第一个问题是在145行你写错变量了。其他问题没找到。
作者: fantacyleo    时间: 2014-9-5 12:13
你的144和145行调用了两次inputstr方法,所以要多输入一个换行
case 0 直接就system.exit了,退出JVM了还执行什么?

作者: 小黑子    时间: 2014-9-5 14:59
yuZhe_toString 发表于 2014-9-5 12:11
第一个问题是在145行你写错变量了。其他问题没找到。

好的,谢谢。大神准备报哪期的黑马班?
作者: 小黑子    时间: 2014-9-5 15:17
fantacyleo 发表于 2014-9-5 12:13
你的144和145行调用了两次inputstr方法,所以要多输入一个换行
case 0 直接就system.exit了,退出JVM了还执 ...

哦,谢谢大神。原来exit是直接退出JVM啊,这和C++和还不一样呢。
那我那个两个问题改了,可是新的问题出现了。

我连续输入两个不同的CD信息。结果倒是打印了两个CD,但是打印的都是第二次输入的信息。这是怎么回事啊?

作者: 小黑子    时间: 2014-9-6 19:17
大神在哪里呀~~~~
作者: 小黑子    时间: 2014-9-7 08:05
大神啊,求指导:'(




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2