java - 增强的for语句

标签 java

你能帮我理解发生了什么吗? 我读了一本书 Core Java。第一个变体来自那里。第二种变体是我尝试编译程序。 我有: Java 版本“1.7.0_21” Java(TM) SE 运行时环境(build 1.7.0_21-b11) Java HotSpot(TM) 64 位服务器 VM(构建 23.21-b01,混合模式)

public class Welcome
{
   public static void main(String[] args)
   {
      String[] greeting = new String[3];
      greeting[0] = "Welcome to Core Java";
      greeting[1] = "by Cay Horstmann";
      greeting[2] = "and Gary Cornell";

      for (String g: greeting)
         System.out.println(greeting[g]);
   }
}

结果:

Welcome.java:16: error: incompatible types
         System.out.println(greeting[g]);
                                     ^
  required: int
  found:    String
1 error

如果我更改我的代码:

public class Welcome
{
   public static void main(String[] args)
   {
      String[] greeting = new String[3];
      greeting[0] = "Welcome to Core Java";
      greeting[1] = "by Cay Horstmann";
      greeting[2] = "and Gary Cornell";

      for (int g: greeting)
         System.out.println(greeting[g]);
   }
}

结果是:

Welcome.java:15: error: incompatible types
      for (int g: greeting)
                  ^
  required: int
  found:    String
1 error

最佳答案

您没有在 enhanced for-loop 中获得 index .您将获得对正在迭代的容器 中的值的引用。因此,您可以直接打印它。

更改第一个st 代码段中的以下语句:

System.out.println(greeting[g]);

到:

System.out.println(g);

对于您的第 2 个nd 片段,这是:

for (int g: greeting)

完全没有意义。正如我所说,您获得了对 greeting 中元素的引用的副本,并且由于 greeting 中的元素属于 String 类型,因此您的循环变量应该是第一个片段中的 String g

关于java - 增强的for语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18045783/

相关文章:

java - 判断点是否在变换后的矩阵内部

java - 使用 return 命令从方法返回

java - 如何在 Spring 中为包(包括子包)中的每个 bean id 添加常量字符串前缀?

java - Queue.Poll() 返回 null 但 Queue.size() >0 在 java 队列中

java - 追加到数组与写入文件

java - 使用 Hibernate 时无法填充 jcombo 框

java - 如何获取 Spring 3 的 spring-framework-3.0.5-RELEASE-with-dependencies.zip 文件?

java - 在 Tomcat 上运行的 Java Web 应用程序中,如何将数据源绑定(bind)到 ServletContext 中的属性?

java - Android ListAdapter 启动@top

java - 如何使用 Dagger 2 将服务注入(inject) JavaFX Controller