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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhanghuxin 中级黑马   /  2013-11-11 08:56  /  1304 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请帮我看看,老是报错:
package cn.zhanghuxin.java;
import java.util.*;
interface IntArrayProductor
{
//接口里定义的product方法用于封装“处理行为”
int product();
}
public class CommandTest
{
//定义一个方法,该生成指定长度的数组,但每个数组元素由于cmd负责产生
public int[] process(IntArrayProductor cmd  , int length)
{
  int[] result = new int[length];
  for (int i = 0; i < length ; i++ )
  {
   result = cmd.product();
  }
  return result;
}
public static void main(String[] args)
{
  CommandTest ct = new CommandTest();
  int seed = 5;
  //生成数组,具体生成方式取决于IntArrayProductor接口的匿名实现类
  int[] result = ct.process(new IntArrayProductor()
  {
   public int product()
   {
    return (int)Math.round(Math.random() * seed);
   }
  } , 6);
  System.out.println(Arrays.toString(result));
}
}

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
本帖最后由 Rockray 于 2013-11-11 10:16 编辑

错误一:process()方法的for()循环中,赋值给数组中元素。
错误二:seed要被final修饰,内部类中访问的变量必须被final修饰。
  1. //package cn.zhanghuxin.java;
  2. import java.util.*;
  3. interface IntArrayProductor
  4. {
  5.         //接口里定义的product方法用于封装“处理行为”
  6.         int product();
  7. }
  8. public class CommandTest
  9. {
  10. //定义一个方法,该生成指定长度的数组,但每个数组元素由于cmd负责产生
  11.         public int[] process(IntArrayProductor cmd  , int length)
  12.         {
  13.                 int[] result = new int[length];
  14.                 for (int i = 0; i < length ; i++ )
  15.                         {
  16.                                 result[i] = cmd.product();  //错误一,赋值给数组元素
  17.                         }
  18.                 return result;
  19.         }
  20.         public static void main(String[] args)
  21.         {
  22.                 CommandTest ct = new CommandTest();
  23.                 final int seed = 5;  //错误二,final
  24.         //生成数组,具体生成方式取决于IntArrayProductor接口的匿名实现类
  25.                 int[] result = ct.process(new IntArrayProductor()
  26.                 {
  27.                         public int product()
  28.                         {
  29.                                 return (int)Math.round(Math.random() * seed);
  30.                         }
  31.                 } , 6);
  32.                 System.out.println(Arrays.toString(result));
  33.         }
  34. }
复制代码
输出结果:




评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

回复 使用道具 举报
//package cn.zhanghuxin.java;
import java.util.*;
interface IntArrayProductor
{

int product();
}
public class CommandTest
{

public int[] process(IntArrayProductor cmd  , int length)
{
  int[] result = new int[length];
  for (int i = 0; i < length ; i++ )
  {
   result = cmd.product();//首先product()是返回int类型,而result是数组,不能赋值
  }
  return result;
}
public static void main(String[] args)
{
  CommandTest ct = new CommandTest();
  final int seed = 5;/*改成final类型,因为当你使用内部匿名类的时候,如果希望内部匿名类可以调用到这个参数,
  就必须设置其为Final,最常见的就是用于函数的回调。*/


  
  int[] result = ct.process(new IntArrayProductor()
  {
   public int product()
   {
    return (int)Math.round(Math.random() * seed);
   }
  } , 6);
  System.out.println(Arrays.toString(result));
}
}

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

回复 使用道具 举报
谢了,翻了一下书,内部类中的局部变量必须用Final修饰符
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马