2014-03-03 31 views
0

我有一组代码,目前,使用的30个由数字手动inputed串的预先设定的列表,这在下面可以看到的数组:爪哇:创建随机串数

String[] elementsToAdd2 = { "100", "510", "170", "214", "268", "398", 
      "235", "802", "900", "723", "699", "1", "16", "999", "890", 
      "725", "998", "978", "988", "990", "989", "984", "320", "321", 
      "400", "415", "450", "50", "660", "624" }; 

我想用一些其他的东西替换它,这些东西可以在特定的预设大小之间产生任意数量的我想要的随机字符串数字。我脑子里想的是使用下面的代码在它的地方:

public class HashFunction { 
    . 
    . 
    . 
    private Random r = new Random(); 
    public String randomString(int limit) 
    { 
     int n = r.nextInt(limit); 
     return n+""; 
    } 
    . 
    . 
    . 
public static void main(String[] args) { 

    HashFunction theFunc = new HashFunction(30); // this is where you can control the number of spaces in the hash table!!! 
      String[] elementsToAdd2 = new String[30]; 

      for (int i = 0; i <= elementsToAdd2.length; i++) 
       { 
        String[i] elementsToAdd2 = randomString(1000); 

       } 

当我读到这,我把它意味着在阵列字符串值“i”将被分配到的随机值会介于0和1000之间。但是,我反而会收到一条错误消息。它说那个“;”预计,我有不兼容的类型。我认为Java正在读这个,因为我试图设置一个等于单个字符串的字符串数组,即使我在“String [i]”中包含了“i”来指定数组中要放置该值的位置。

如果有人能帮助我理解我的问题,请告诉我。谢谢!

p.s.此代码会创建哈希表,以防与我遇到的问题相关。如果您愿意,我可以提供代码,但我想分离问题并仅显示与其相关的内容。

+1

不是'String [i] elementsToAdd2 = ...'但'elementsToAdd2 [i] = ...'。循环不应该在'i <= elementsToAdd2.length',而是'i Marco13

回答

3

String[i] elementsToAdd2 = randomString(1000);

错误。 String[i]用来定义数组就像你已经做到了,在这里

String[] elementsToAdd2 = new String[30]; 

,但您要分配给它的值是不是数组作为它应该是一个数组元素。因此,将元素添加到一个数组,你可以使用数组名和索引,并将其设置为所需的值

elementsToAdd2[i] = randomString(1000);


此外

数组大小

此代码将导致ArrayOutOfBoundsIndexException,因为您试图访问数组中比元素的长度大的元素wi日

i <= elementsToAdd2.length 

作为一个阵列length等于有多少地方有,但这些位置的索引从0开始,这意味着最后一个元素总是length-1,使用

i < elementsToAdd2.length 

方法来访问(尖out by @Dominic)

您正在访问的方法randomString()static(因为它是您的main方法),但那m ethod是一个实例变量(与一个对象关联),你需要通过它所属的对象来访问它,theFunc,像这样

theFunc.randomString(1000) 
+0

你还需要调用'theFunc.randomString(1000)'而不是'randomString(1000)' – Dominic

+1

谢谢你们!我实现了Ross Drew和Dominic的建议,现在一切正常。我很感激你花时间教我。 – user3274463

0

从阵列循环利用循环varaible删除此String[i] elementsToAdd2 = randomString(1000) statment obejct不串

for (int i = 0; i <elementsToAdd2.length; i++) 
       { 
        elementsToAdd2[i] = randomString(1000); 

       } 
+1

你的代码不能编译。 你的'String elementsToAdd2 [I] = randomString(1000);'最多可以定义循环局部变量并且不会影响主数组。 –

+0

@GermannArlington我做了更改 – Engineer

0

在你的循环,你说:

for (int i = 0; i <= elementsToAdd2.length; i++) 
{ 
    String[i] elementsToAdd2 = randomString(1000); 
} 

这应该成为:

for (int i = 0; i <= elementsToAdd2.length; i++) 
{ 
    elementsToAdd2[i] = theFunc.randomString(1000); 
} 

您将字符串指定为位置i处的elementsToAdd2值,而不是整个数组,导致不兼容的类型错误。您还需要调用theFunc实例的randomString方法,而不仅仅调用它自己的方法。