黑马程序员技术交流社区

标题: 学习中的疑问 已解决 [打印本页]

作者: 毛标    时间: 2012-8-9 21:53
标题: 学习中的疑问 已解决
本帖最后由 毛标 于 2012-8-10 01:01 编辑

import java.io.*;
import java.util.*;
class Test2
{
public static void main(String[] args)
{
  setAndGet();
}
public static void setAndGet()
{
Properties prop = new Properties();
prop.setProperty("zhangsan","20");
prop.setProperty("lisi","22");
String value = prop.getProperty("lisi");
Set<String> names = prop.stringPropertyNames();
  for(String s: names)
   {
    System.out.println(s+":"+prop.getProperty(s));
   }
}
}视屏中的代码,请高手详解下for循环中的变量S是自己定义还是?详解下最后2句代码的S代表意思,谢谢!

作者: 张雪磊    时间: 2012-8-9 22:11
本帖最后由 张雪磊 于 2012-8-9 22:44 编辑

import java.io.*;
import java.util.*;
class Test2
{
public static void main(String[] args)
{
  setAndGet();
}
public static void setAndGet()
{
Properties prop = new Properties();
prop.setProperty("zhangsan","20");
prop.setProperty("lisi","22");
String value = prop.getProperty("lisi");
Set<String> names = prop.stringPropertyNames();
  for(String s: names)
   {
    System.out.println(s+":"+prop.getProperty(s));
   }
}
}视屏中的代码,请高手详解下for循环中的变量S是自己定义还是?详解下最后2句代码的S代表意思,谢谢!


for循环中的s完全是自己定义的,可定义成任何标示符,
for(String s: names)
   {
    System.out.println(s+":"+prop.getProperty(s));
   }

for循环底层实现的是迭代器,他的语法格式是:
for(遍历的集合或数组里的元素类型  标示符(迭代过程中记录其中的每一个元素)   :   要遍历的集合或者元素)
   {
          需要被执行的代码,
   }  
他与普通for循环的去边就是,它有局限性,必须有被遍历的目标。比如一般 “for(这里只是控制循环的次数){}”,然后
执行体里想操作什么操作什么
而高级for(这里面必须得有要遍历的集合或密码),执行题里是对集合或者数组以及里面元素的操作,如果不操作
这些你定义高级for还有什么意义呢?

for(String s: names)
   {
    System.out.println(s+":"+prop.getProperty(s));
   }
拿你的代码举例,他的过程就是通过底层迭代names,每迭代出一个元素就付给s,然后执行大括号里的代码,指针
指向下一个元素,迭代出下一个元素在赋给s,在执行大括号的代码,直到整个元素迭代完毕结束。


作者: 朱云坤    时间: 2012-8-9 22:19
  1. import java.io.*;
  2. import java.util.*;
  3. class Test2
  4. {
  5. public static void main(String[] args)
  6. {
  7.   setAndGet();
  8. }
  9. public static void setAndGet()
  10. {
  11. Properties prop = new Properties();//Properties是一个持久的属性集,它是Hashtable的子类
  12.                                  //它的属性列表是键值对的形式
  13. prop.setProperty("zhangsan","20");
  14. prop.setProperty("lisi","22");
  15. String value = prop.getProperty("lisi");//getProperty方法是用指定的键在列表中搜索属性
  16. Set<String> names = prop.stringPropertyNames();//获得prop属性列表中的键集
  17.   for(String s: names)//这里定义一个高级for循环来遍历集合 格式为 for(数据类型 变量名:被遍历的集合(Collection)或者数组 )
  18.    {
  19.     System.out.println(s+":"+prop.getProperty(s));//将变量s输出在控制台上  并通过键来取得对应的属性
  20.    }
  21. }
  22. }
复制代码

作者: 官文昌    时间: 2012-8-9 23:06
import java.io.*;
import java.util.*;
class Test2
{
public static void main(String[] args)
{
  setAndGet();
}
public static void setAndGet()
{
Properties prop = new Properties();
prop.setProperty("zhangsan","20");
prop.setProperty("lisi","22");
String value = prop.getProperty("lisi");
Set<String> names = prop.stringPropertyNames();
  for(String s: names)   //for(int i=0;i<8;i++),for循环是这样的吧。而你这里增强for循环的里的s就相当与for循环的里的i,所以你的s可以随便起的,
   {
    System.out.println(s+":"+prop.getProperty(s));
   }
}


看看这个列子吧;
nt arr[] = {1, 2, 3, 4, 5, 6, 7, 8};  /**         * 新式写法         */  for (int a : arr)   System.out.println(a);  /**         * 旧式写法         */  for (int i = 0; i < arr.length; i++)   System.out.println(arr);  这个是1.5以后出的就是让着你直接定义一个对象 然后迭代你要循环的对象!



作者: 黑马-王泽斌    时间: 2012-8-9 23:13
你定义的set集合,指定集合里的对象的数据是String类型(即:Set<String>),在增强for循环里for(类型 变量:容器),循环中每读到的一个names就装入s中,它是String类型 String s  ,这个s是一个变量。
在打印语句中,打印setProperty(key,value) 中的键集key,这个s是每次装入的names,而names获得prop属性列表中的键集key(即姓名),然后prop.getProperty(s)中的s是键集所映射的value(即年龄)。
作者: 王广彬    时间: 2012-8-9 23:19
哈哈,楼主,代码中用的是foreach语句,和for循环差不多,但是foreach语句的效率比for语句稍高,代码中的s相当于names中的每一个元素,你可以把s当成每一次循环都代表当前的元素.
给你举个例子吧:
class Demo2
{
         public static void main(String[] args)
        {
                 int array[]={1,2,3,4,45,5,6,7};
                 System.out.println("用foreach循环输出:");
                 for(int a:array)System.out.print(a+" ");
                 System.out.println("\n用for循环输出:");
                 for(int i=0;i<array.length;i++){
                         System.out.print(array[i]+" ");
                 }
         }
}
其实都挺好用的,到时得看你在什么情况下用.根据不同的情况用不同的方法.如果是单层循环用foreach比较方便,如果是多层循环要用for循环了.
作者: 郑彬    时间: 2012-8-9 23:31
for(String s: names)//这里的s代表的只是一个变量名,或者说只是一个符号而已,是自己可以定义的,只要符合变量名定义规则就行。这里s代表的是一个字符串类型的变量名。s指向这个字符串的地址。   {    System.out.println(s+":"+prop.getProperty(s));//这里的s指向地址没变,但是地址里的内容随着遍历而被不断赋予新的内容。   }}

求分数




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