黑马程序员技术交流社区

标题: 难道数组越界了?求解! [打印本页]

作者: 饶正林    时间: 2013-3-23 14:34
标题: 难道数组越界了?求解!
/*
The function of class:随机产生一个数组的随机数,并且打印

出来
@author:Hallin
*/
import java.util.Random;
class To_Random
{
        public static void main(String[] args)
        {
         int[] a=new int[10];
         toRamdom(a);
        }

        //创建一个函数用于产生随机数,并且存储在数组中
        static void toRamdom(int[] a)
        {
          int i=0;
          while(i<a.length)
          {
                a= new Random().nextInt(15) + 1;
                i++;
                for(int j=0;j<i-2;j++)
                {
                  if(a==a[j])
                  {
                    i--;
                  }
                }
          }
          toPrint(a);
        }

        //创建一个函数,用于打印传值后的数组
        static void toPrint(int[] a)
        {
          for(int i=0;i<a.length;i++)
          {
           System.out.print(" "+a+" ");
           }
        }
}




作者: MyNameIs520    时间: 2013-3-23 14:46
楼主用下面代码试试:

import java.util.Random;
class To_Random
{
        public static void main(String[] args)
        {
         int[] a=new int[10];
         toRamdom(a);
        }

        //创建一个函数用于产生随机数,并且存储在数组中
        static void toRamdom(int[] a)
        {
         
          for(int i=0;i<a.length;i++)
          {
                a= new Random().nextInt(15) + 1;
          }
          toPrint(a);
        }

        //创建一个函数,用于打印传值后的数组
        static void toPrint(int[] a)
        {
          for(int i=0;i<a.length;i++)
          {
           System.out.println(a);
           }
        }
}
产生的随机数组数如下:
6
6
4
8
12
9
12
4
1


作者: 饶正林    时间: 2013-3-23 14:55
吴上波 发表于 2013-3-23 14:46
楼主用下面代码试试:

import java.util.Random;

你把我的代码删了一些,我是想用下面代码产生随机并且各个元素不相同的数组。谢谢!
for(int j=0;j<i-2;j++)
                {
                  if(a==a[j])
                  {
                    i--;
                  }
                }
作者: 饶正林    时间: 2013-3-23 14:57
饶正林 发表于 2013-3-23 14:55
你把我的代码删了一些,我是想用下面代码产生随机并且各个元素不相同的数组。谢谢!
for(int j=0;j ...

上面代码少粘了一点,
for(int j=0;j<i-2;j++)
                {
                  if(a==a[j])//是这样的、
                  {
                    i--;
                  }
                }
作者: MyNameIs520    时间: 2013-3-23 15:11
本帖最后由 吴上波 于 2013-3-23 15:15 编辑


作者: 饶正林    时间: 2013-3-23 15:16
吴上波 发表于 2013-3-23 15:11

你去运行了不?这是我原来的代码呀,为什么我运行会出现错误提示?
作者: MyNameIs520    时间: 2013-3-23 15:16
本帖最后由 吴上波 于 2013-3-23 15:22 编辑

我再看看代码~~
作者: MyNameIs520    时间: 2013-3-23 15:18
吴上波 发表于 2013-3-23 15:16
  1. import java.util.Random;

  2. class To_Random {
  3.         public static void main(String[] args) {
  4.                 int[] a = new int[10];
  5.                 toRamdom(a);
  6.         }

  7.         // 创建一个函数用于产生随机数,并且存储在数组中
  8.         static void toRamdom(int[] a) {

  9.                 for (int i = 0; i < a.length; i++) {
  10.                         a[i] = new Random().nextInt(15) + 1;
  11.                         for (int y = 0; y < i; y++) {
  12.                                 while(a[i] == a[y]) {
  13.                                         a[i] = new Random().nextInt(15) + 1;
  14.                                 }
  15.                         }
  16.                 }
  17.                 toPrint(a);
  18.         }

  19.         // 创建一个函数,用于打印传值后的数组
  20.         static void toPrint(int[] a) {
  21.                 for (int i = 0; i < a.length; i++) {
  22.                         System.out.println(a[i]);
  23.                 }
  24.         }
  25. }
复制代码

作者: 饶正林    时间: 2013-3-23 15:22
吴上波 发表于 2013-3-23 15:18

谢谢!我看明白了你的代码,为什么我的那种方法不能实现呢?
作者: 江公亮    时间: 2013-3-23 16:33
a= new Random().nextInt(15) + 1;//左边可是数组的内存首地址额,右边产生可是整数额,不能这样赋值吧。
同样,if(a==a[j])也是不能比较的
  1. //下面是我实现产生是个不重复的随机数的代码,
  2. int a[]=new int[10];
  3. int i=0;
  4. int temp;
  5. Random random=new Random();

  6. for(;i<a.length;i++){
  7. doagain:
  8. while(true){
  9. temp=random.nextInt(10);
  10. for(int j=0;j<i;j++){
  11. if(temp==a[j])
  12. continue doagain;
  13. }
  14. a[i]=temp;
  15. break;
  16. }
  17. }
  18. for(int j=0;j<a.length;j++){
  19. System.out.println(a[j]);
  20. }
复制代码

作者: 张钶    时间: 2013-3-23 17:54
饶正林 发表于 2013-3-23 14:57
上面代码少粘了一点,
for(int j=0;j

1.  a= new Random().nextInt(15) + 1;  //首先这是错误的,a是数组,我们要对a中的元素赋值,应该是a= new Random().nextInt(15) + 1;
2.  //创建一个函数,用于打印传值后的数组
        static void toPrint(int[] a)
        {
          for(int i=0;i<a.length;i++)
          {
           System.out.print(" "+a+" ");  //a要改成a
           }
        }
}
3.  
如果你非要用上面这段代码,建议这么改
  while(i<a.length)
          {
               a= new Random().nextInt(15) + 1;
                for(int j=0;j<i;j++)
                {
                  if(a==a[j])
                  {
                    i--;
                  }
                  break;  // 退出当前循环,重新赋值
                }               
                i++;
          }
作者: 张钶    时间: 2013-3-23 17:55
张钶 发表于 2013-3-23 17:54
1.  a= new Random().nextInt(15) + 1;  //首先这是错误的,a是数组,我们要对a中的元素赋值,应该是a= n ...

while(i<a.length)
          {
               a= new Random().nextInt(15) + 1;
                for(int j=0;j<i;j++)
                {
                  if(a==a[j])
                  {
                    i--;
                  }
                  break;
                }               
                i++;
          }

写错了,是这样的:L
作者: 张钶    时间: 2013-3-23 17:56

a都改成a[i],前面怎么显示不了{:soso_e105:}
作者: 饶正林    时间: 2013-3-24 19:52
张钶 发表于 2013-3-23 17:56
a都改成a,前面怎么显示不了

我也觉得,我是写对了,为什么呢?难道论坛出bug了?




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