A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李涛兴 中级黑马   /  2013-1-27 19:13  /  2167 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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. }
复制代码
标记的地方显示出了问题。但怎么改都不行。请高手指点

7 个回复

倒序浏览
出什么错了啊?
回复 使用道具 举报
Sample 类作为内部类,且在成员位置上,就有了成员变量的特性。你在static main方法中直接访问非static的成员变量,就错了。你在Sample类上添加个static就行了。public static class Sample{}
回复 使用道具 举报
本帖最后由 李俊伟 于 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;
    }

}

回复 使用道具 举报
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;
                                }
  }
回复 使用道具 举报
Sample是内部类,调用方式是以下
Test3.Sample s1= new Test3().new Sample("zhangsan");
回复 使用道具 举报
黄锦成 发表于 2013-1-27 20:09
Sample 类作为内部类,且在成员位置上,就有了成员变量的特性。你在static main方法中直接访问非static的成 ...

哥们回答的正是,谢谢了
回复 使用道具 举报
杨浩 中级黑马 2013-1-28 17:16:58
8#
李涛兴 发表于 2013-1-27 20:53
哥们回答的正是,谢谢了

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