黑马程序员技术交流社区

标题: for 循环问题,求解? [打印本页]

作者: 高欢欢    时间: 2012-7-17 16:37
标题: for 循环问题,求解?
本帖最后由 高欢欢 于 2012-7-18 16:55 编辑

import java.util.*;
public class LotteryDrawing
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        int k = in.nextInt();
        int n = in.nextInt();
        int[] numbers= new int[n];
        for(int i=0;i<numbers.length;i++)
            numbers=i+1;
        int[] result = new int[k];
        for(int i=0;i<result.length;i++)
        {
            int r =(int)(Math.random()*n);
            result=numbers[r];
            numbers[r]=numbers[n-1];
            n--;
            
        }
   
    Arrays.sort(result);
    for(int r:result)                  //我觉得如改成for(int i:result) {System.out.println(i);}也可以输出也是对的
        System.out.println(r);         //r不是随机数吗?r  又不是从零开始怎么循环啊????
    }
}

作者: 黑马刘涛    时间: 2012-7-17 16:50
本帖最后由 黑马刘涛 于 2012-7-17 16:52 编辑

for(int r:result)                  //我觉得如改成for(int i:result) {System.out.println(i);}也可以输出也是对的
        System.out.println(r);         //r不是随机数吗?r  又不是从零开始怎么循环啊????
高级for循环里的变量r怎么会是随机数呢?foreach循环,通过完全地隐藏迭代器和索引变量,避免了混乱和出错的可能。这种模式同时适用于集合和数组:
  1. for(Element e : elements) {
  2.     doSomething(e);
  3. }
  4. for(元素类型 变量名:数组|集合){
  5.      doSomething(变量名);
  6. }
复制代码
增强for循环和iterator遍历的效果是一样的,也就说增强for循环的内部也就是调用iteratoer实现的,使用foreach的对象必须实现Iterator 接口。但是增强for循环有些缺点,例如不能在增强循环里动态的删除集合内容。不能获取下标等。
希望对你有用。
作者: 党巾水    时间: 2012-7-17 17:10
for(int r:result)这里的r和上面循环里的r没有关系。上面循环里的r的作用域出了那个循环就结束了。这里是个全新的r。所以就没有什么随机数的问题了。
作者: 黄丽慧    时间: 2012-7-17 17:13
    Arrays.sort(result);
    for(int r:result)                  //我觉得如改成for(int i:result) {System.out.println(i);}也可以输出也是对的
        System.out.println(r);         //r不是随机数吗?r  又不是从零开始怎么循环啊????
    }
for(int i:result) {System.out.println(i);}这样是对的,因为i只是一个局部变量的名称,可以随意定义,对for循环没有影响

这里的r并不是一个随机数,我觉得应该是for循环内部已经默认赋值了。增强for循环之所以能够这样写,是因为其内部是用迭代器来实现对元素的遍历。
基本语法如下:
for (I #i = Expression.iterator(); #i.hasNext(); ) {
VariableModifiers
opt
Type Identifier  = #i.next();
Statement
}

作者: 鲍霄霄    时间: 2012-7-17 20:16
你看,那里都写明了,是for(int r:result) ,r 前面有个int,这明显是重新定义的嘛,而是还是两个不同for循环中定义的,他们俩是八竿子都都打不着,换句话说,for(int r:result) 的r,你想换成什么就换成什么




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