【问题标题】:Java: Creating an array of random string numbersJava:创建一个随机字符串数组
【发布时间】:2014-03-03 10:57:40
【问题描述】:

我有一组代码,目前使用的是由数字组成的 30 个手动输入字符串的预设列表,如下所示:

    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" 以指定在数组中放置值的位置。

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

附言此代码创建哈希表,以防与我遇到的问题相关。如果您愿意,我可以提供代码,但我想隔离问题并仅显示与之相关的内容。

【问题讨论】:

  • 不是String[i] elementsToAdd2 = ...,而是elementsToAdd2[i] = ...。并且循环不应在 i &lt;= elementsToAdd2.length 时运行,而应在 i &lt; elementsToAdd2.length 时运行。

标签: java string random arrays


【解决方案1】:

String[i] elementsToAdd2 = randomString(1000);

错了。 String[i] 用于定义一个数组,就像你已经做过的那样,在这里

String[] elementsToAdd2 = new String[30];

但是您试图为其分配一个不是数组的值,因为它应该是一个数组元素。因此,要将元素添加到数组中,请使用数组名称和索引并将其设置为所需的值

elementsToAdd2[i] = randomString(1000);


另外

数组大小

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

i <= elementsToAdd2.length

作为数组 length 等于它有多少个位置,但这些位置索引从 0 开始,这意味着最后一个元素始终是 length-1,请使用

i < elementsToAdd2.length

方法访问(@Dominic 指出)

您访问randomString() 的方法是static(因为它是您的main 方法)但该方法是一个实例变量(与一个对象相关联),您需要通过它所属的对象来访问它即theFunc,就像这样

 theFunc.randomString(1000)

【讨论】:

  • 您还需要拨打theFunc.randomString(1000)而不是randomString(1000)
  • 谢谢大家!我完全按照 Ross Drew 和 Dominic 的建议实施了,现在一切正常。非常感谢您花时间教我。
【解决方案2】:

从循环中删除这个String[i] elementsToAdd2 = randomString(1000) 语句,使用带有数组对象而不是字符串的循环变量

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

                }

【讨论】:

  • 您的代码无法编译。您的String elementsToAdd2[I] = randomString(1000); 最多只能定义循环局部变量,不会影响主数组。
【解决方案3】:

在你的 for 循环中你说:

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 方法,而不仅仅是它自己的方法调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2022-09-27
    • 1970-01-01
    • 2011-03-15
    • 2016-09-23
    • 2014-10-20
    • 2014-05-13
    相关资源
    最近更新 更多