提问者:小点点

将数组传递给方法(使用随机数)


我正在一块一块地写程序。我继续收到编译错误。你能看看我的代码来确定我的问题吗?

所以在这里,我是说数组可以存储1000个双精度类型的元素。现在我想将数组传递给我的main方法,并将1000个随机数放入数组中。所以我将创建一个新方法。

public class Practice{
   public static void main(String[] args){
     double[]array=new double[1000];
   }
}

在这里,我创建了一个名为passArray的新方法。我想说的是,对于每个数组元素在其各自的索引处(基于计数)分配一个随机整数,直到我们达到1000。

  public static void passArray(double[]x){
    for(int counter=0; counter<x.length; counter++){
      x[counter]=(int)(Math.random()*1000);
  }

好的,所以现在我想打印我的结果以确定我的代码是否做了我想要它做的事情。在我的main方法中,我将使用增强的for循环:

    for(double k: array)
      System.out.println(k);
  }//End of main Method

我继续遇到的问题是编译错误。然而,输出随机显示999个值为双精度值。我这里到底缺少了什么?


共2个答案

匿名用户

我想你有一个错别字(从for循环中删除'}')

您需要将数组传递给方法才能使其工作。

这编译并运行:

public class Practice{
   public static void main(String[] args){

     double[]array=new double[1000];
     // calling the method
     passArray(array);
     // print the array
     for(double k: array)
         System.out.println(k);
     //End of main Method
   }

   public static void passArray(double[]x){
        for(int counter=0; counter<x.length; counter++){
          // compiles ... but why cast to int if you have double[] ?
          x[counter]=(int)(Math.random()*1000);
      }
   }
}

匿名用户

不确定编译错误,但您的int到double问题位于代码开头。

您声明了一个double类型的数组:

double[] array = new double[1000];

您正在尝试将随机值转换为int类型,编译器应该接受。

x[counter] = (int) (Math.random() * 1000);

但是,由于这是一个double类型的数组,因此您将值存储为double。即值立即转换回double。java真正要做的就是,从double(例如567.97)更改为int 567,然后再次将其转换为double(567.0)。请注意,它现在已经丢失了所有浮点信息,因为它被转换为int。或者用更怪异的术语来说,尾数已设置为全0。

要么您必须将数组声明为整数类型。或者每次访问值时转换回int。

eg.

int[] array = new int[1000];

public static void passArray(int[] x) {
// code
}

System.out.println((int)k);

编辑:您是否收到编译器错误或警告?两者有很大区别。警告将允许它运行,您的帖子表明正在发生,错误将无法编译,因此无法运行。您可能只是收到有关从int转换为double的类型的警告。