黑马程序员技术交流社区

标题: 简单代码,但不知道问题出在那? [打印本页]

作者: 李涛兴    时间: 2013-1-27 19:13
标题: 简单代码,但不知道问题出在那?
  1. import java.util.ArrayList;
  2. import java.util.Iterator;
  3. import java.util.List;

  4. public class Test3{
  5.         public static void main(String[] args) {
  6.                 ArrayList l = new ArrayList();
  7.                 Sample s1= new Sample("zhangsan");//
  8.                 Sample s2= new Sample("lisi");//
  9.                 l.add(s1);
  10.                 l.add(s2);  

  11.   Iterator it = l.iterator();
  12.   while(it.hasNext()) {
  13.         Sample sa=(Sample) it.next();
  14.    System.out.println(sa.getName());
  15.         }
  16. }
  17.        
  18. public class Sample  {
  19.                 private String name;
  20.                 private int age;
  21.                 public Sample(){
  22.                        
  23.                 }
  24.                
  25.                 public Sample(String name){
  26.                         this.name=name;
  27.                         //this.age=age;
  28.                 }
  29.        
  30.                 public String getName() {
  31.                         return name;
  32.                 }
  33.        

  34.         }


  35. }
复制代码
标记的地方显示出了问题。但怎么改都不行。请高手指点
作者: 成吉思汗    时间: 2013-1-27 19:18
出什么错了啊?
作者: 黄锦成    时间: 2013-1-27 20:09
Sample 类作为内部类,且在成员位置上,就有了成员变量的特性。你在static main方法中直接访问非static的成员变量,就错了。你在Sample类上添加个static就行了。public static class Sample{}
作者: 李俊伟    时间: 2013-1-27 20:11
本帖最后由 李俊伟 于 2013-1-27 20:19 编辑

我把你代码复制到控制台上检查了一遍,有如下问题:
<1>你的Sample类嵌套到了Test类里面,也就是说Sample类成了Test3的内部类。那你的外部类调用内部类的方法就不对了,内部类学习视频09-1,不懂的你再看一看。
<2>一个java类中只能允许有一个public类,类名''public class Sample"应该改为"class Sample"。
<3>第一种修改方法如下:
import java.util.ArrayList;
import java.util.Iterator;
//import java.util.List;

public class Test3{
       public static void main(String[] args) {
               ArrayList<Sample> l = new ArrayList<Sample>();
               Test3.Sample s1= new Test3().new Sample("zhangsan");//
               Test3.Sample s2= new Test3().new Sample("lisi");//
               l.add(s1);
               l.add(s2);  

  Iterator<Sample> it = l.iterator();
  while(it.hasNext()) {
       Sample sa=(Sample) it.next();
  System.out.println(sa.getName());
      }
}

class Sample  {
               private String name;
              // private int age;
               public Sample(){

              }
              
               public Sample(String name){
                       this.name=name;
                       //this.age=age;
                }

               public String getName() {
                      return name;
               }
        }

}

<4>第二种修改方法,直接把Sample类写到Test3类的外部,并把类名''public class Sample"应该改为"class Sample",代码如下:
import java.util.ArrayList;
import java.util.Iterator;
//import java.util.List;

public class Test3{
       public static void main(String[] args) {
               ArrayList<Sample> l = new ArrayList<Sample>();
               Sample s1= new Sample("zhangsan");//
               Sample s2= new Sample("lisi");//
               l.add(s1);
               l.add(s2);  

  Iterator<Sample> it = l.iterator();
  while(it.hasNext()) {
       Sample sa=(Sample) it.next();
  System.out.println(sa.getName());
      }
}
}


class Sample  {
    private String name;
   // private int age;
    public Sample(){

   }
   
    public Sample(String name){
            this.name=name;
            //this.age=age;
     }

    public String getName() {
           return name;
    }

}


作者: 38323243    时间: 2013-1-27 20:32
import java.util.*;//一句就够了
public class text
        {
        public static void main(String[] args)
                        {
             ArrayList l = new ArrayList();
                                l.add(new Sample("zhangsan",20));
                                l.add(new Sample("lisi",22));
                                  Iterator it = l.iterator();
                                 while(it.hasNext())
                                {       
                                        Sample sa = (Sample)it.next();
                                  System.out.println(sa.getName()+":"+sa.getAge());
                                }
                        }
}

        

         class Sample
        {
            private String name;
                        private int age;

                Sample(String name,int age)
                                       
                                {
                                        this.name=name;
                                        this.age=age;

                                }
               
                public String getName()
                                {
                        return name;
                }
                                public int getAge()
                                {
                               
                                         return age;
                                }
  }

作者: 梁俊    时间: 2013-1-27 20:44
Sample是内部类,调用方式是以下
Test3.Sample s1= new Test3().new Sample("zhangsan");
作者: 李涛兴    时间: 2013-1-27 20:53
黄锦成 发表于 2013-1-27 20:09
Sample 类作为内部类,且在成员位置上,就有了成员变量的特性。你在static main方法中直接访问非static的成 ...

哥们回答的正是,谢谢了
作者: 杨浩    时间: 2013-1-28 17:16
李涛兴 发表于 2013-1-27 20:53
哥们回答的正是,谢谢了

这个题目 - - 也许我扣分的地方,就是理解偏差了一点,我只建了一个类Sample,把main方法写在Sample里面了,看来真是误解了题目,如果题目最后说集合里添加任意多个Sample类的对象。。。那就不会误解了嘛。或者直接要求使用内部类的形式,哇,扣的亏啊。
----------------
因为你的内部类是非静态的,所以要调用它的方法,必须先有对象是吧,而要有内部类的对象,那就必须先有外部类的对象,所以咯,要先创建外部类的对象才行。




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