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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王鑫宇 黑马帝   /  2011-8-1 12:54  /  2825 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

[code=java]package cn.itcast.day;

public class VariablcParameter {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                System.out.println(add(2,3));
                System.out.println(add(2,3,4));
               
        }
        public static int add(int x,int ... args){
                int sum = x;
                /*for(int i = 0;i<args.length;i++){
                sum+=args;
                }*/
                for(int arg : args){
                        sum += x;
                }
                return sum;
       
        }

}[/code]听张老师讲增强For的时候。这点很不懂,增强For的参数很不理解
(int arg :args)到底是什么意思啊?请指教

评分

参与人数 1技术分 +1 收起 理由
小龙 + 1 不懂就问!

查看全部评分

8 个回复

倒序浏览
黑马网友  发表于 2011-8-1 12:55:46
沙发

问题补充

看能看明白什么意思,但是单独拿出来,比如说自己应该如何用,就不知道什么时候应该用到增强For了
回复 使用道具 举报
黑马网友  发表于 2011-8-1 14:16:29
藤椅
增强for循环是J2SE5.0的新特性,其语法格式是:for(type 迭代变量名:集合对象名(或
数组名)){…}
迭代变量必须在for( )的括号中定义,它代表集合或数组中的每个元素,集合必须是实现了Iterable接口的集合类 ,在增强的for循环中,我们不需要去检查数组的边界,不必担心数组下标越界, 这些都由增强的for循环替我们代劳了
例:
在J2SE5.0之前我们要求一个int数组中所有元素的和是这么写的:[code]int sum=0;
for(int i=0;数组名.length;i++)
{
    sum+=数组名;
}
return sum; [/code]用增强的for功能可这样写:[code]for(int i;数组名)    //迭代现在我们可以用增强的变量名可以任取
{
    sum+=i;
}
return sum;[/code]在集合类得遍历上更能发挥增强for的优势
例:[code]Map<String,Integer> maps=new HashMap<String,Integer>();
maps.put("one", 1);
maps.put("two", 2);
maps.put("three",3);
Set<Map.Entry<String, Integer>>entrySet=maps.entrySet();//HashMap并未实现Iterable接口,但它有一个方法entrySet() ,返回一个对应对象 maps的 、实现Set接口类的对象,因为set接口继承了Iterable接口,所以返回的这个对象的类,必实现了Iterable接口,此时,我们就可以通过
增强for进行迭代,得出HashMap类的对象maps里面的key、value
for(Map.Entry<String, Integer> m:entrySet)
{
    System.out.println(m.getKey()+"="+m.getValue());
} [/code]

评分

参与人数 1技术分 +2 收起 理由
老罗 + 2 我很赞同

查看全部评分

回复 使用道具 举报
args是一个数组对象,arg 是它的一个成员,这个关系就是arg =args[0],arg =args[1],for加强循环就是把args中所有成员,如args[0],args[1],都循环一遍,相当于自动设置了普通循环中的args.length 和i++,如果你的循环当中需要args每一个成员,使用会很方便。至于arg 前边的int是根据你数组中的args[0]里边的元素而定的。

再说简单点,args是要循环集合,这个可以是数组,也可以是像List等一些表示集合东西,arg 就是集合里面的成员(需要指定类型)。

当然 这种东西其实用两遍就自然明白了,不必细究。
[ 本帖最后由 李龙 于 2011-08-01  14:18 编辑 ]

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-8-2 02:47:34
报纸
:Q [b]看的云里雾里的,看来还是照葫芦画瓢,慢慢画吧,时间久了也就明白了。谢谢了[/b]

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 呵呵

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-8-2 11:20:19
地板
一般来说这种for循环的基本样式格式是:for(变量类型  循环变量名 : 要被遍历的对象) 在这里“循环变量名”是自己去定义的,而“要被遍历的对象”则是要被遍历的数组名或者集合名,上面的例子中arg对应的是你自己所定义的变量名字,args则是你所要遍历的那个数组

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-8-2 12:54:57
7#
for(type 变量名 :集合变量名){...}  然后用这个变量逐一取集合的每一个元素,取出来后就执行循环体
传统for循环能用的场合他都能用,主要好处表现实现了Iterable的集合类像楼上张晴举得例子就是了

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-8-2 17:09:42
8#
增强型for即,更简单的for;[code=java]int [] args = {1,2,2,3,8};
依次取出数组的每个元素
//for
for(int i=0;i<args.length;i++) {
    System.out.println(args[i]);
}
//foreach
for(int arg : args) {
  System.out.println(arg);
}[/code]相比较来看,foreach代码更简洁(而且,在内存上,foreach比for省去了变量 i 的内存开销)

用起来嘛,,反正我是当for用的,方便!

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-8-4 13:33:03
9#
我觉得 简单点说就是 把数组里面的东西 通过for 循环一个一个的拿出来 操作一下 for 循环里面还可以使用 if ()   这样就能 处理特殊情况了 比如:
for(String arg : args ){
if( arg == 3 ){
System.out.println("今天天儿 挺好哈");
}
}

呵呵 这样的 不久可以应用在 HashMap 里面么 arg 是 key  打印 getValue

而且这个好像不仅限于数组  集合里面的元素也可以迭代
import java.util.List;
import java.util.ArrayList;

public class HelloWorld {
   
        public static void main(String[] args) {
               
        List lists = new ArrayList();

        lists.add("ddd");
        lists.add("ggg");
        lists.add(2);
        lists.add(453);
       
        for(Object list : lists){
                System.out.println(list);
               
        }
        }
}

自己的理解  回答的不好 见谅

评分

参与人数 1技术分 +2 收起 理由
老罗 + 2 论坛有帖java代码功能

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马