【问题标题】:Java random generate string values from array of stringsJava从字符串数组随机生成字符串值
【发布时间】:2015-11-23 12:44:07
【问题描述】:

我正在尝试从数组自动生成字符串值并将它们添加到另一个数组,但我有一个 nullPointer 异常。

protected static Random generator = new Random();

protected static String[] townNames = { "Paris", "Sofia", "Wiena", "Amsterdam" };
protected static String[] arr;

public static void main(String[] args) {

    for (int i = 0; i < towns.size(); i++) {
        arr[i] = townNames[generator.nextInt(townNames.length)];
    }

    for (String i : arr) {
        System.out.println(i);
    }

}

编辑

我已经编辑了代码,现在它可以正常工作了。

protected static Random generator = new Random();
protected static ArrayList<String> townNames = new ArrayList<>();

protected static ArrayList<String> generatedTowns = new ArrayList<String>();

public static void main(String[] args) {
    generatedArr(generatedTowns);
}

public static void generatedArr(ArrayList<String> a) {
    townNames.add("Paris");
    townNames.add("Sofia");
    townNames.add("Wiena");
    townNames.add("Amsterdam");
    townNames.add("Chikago");
    townNames.add("Vienna");
    townNames.add("Miami");
    townNames.add("Boston");
    townNames.add("New Orleans");
    for (int i = 0; i < 4; i++) {
        String value = townNames.get(generator.nextInt(townNames.size()));
        generatedTowns.add(value);
        townNames.remove(value);
    }

    for (String i : a) {
        System.out.println(i);
    }
}

【问题讨论】:

  • 请查看:stackoverflow.com/help/mcve。你看,问题是如果有人想帮助你,那么首先必须让你的代码运行起来。找到所有丢失的导入,想出一个城镇级等......你应该提供代码,这样我就可以复制粘贴它并运行它......像这样首先必须投入半个小时的工作只是为了达到你现在的位置......另外,你可以告诉我们你得到了什么以及你期望什么......
  • @dingalapadum 我编辑了我的帖子。
  • 我仍然无法编译它......仍然缺少一些东西:类,导入......无论如何:快速浏览我认为问题是你从未初始化arr
  • 如果您要显示代码,您应该标记问题所涉及的语言。它可以帮助其他人找到问题,它也会影响代码块的语法着色,
  • 我编辑了我的答案并发布了您应该能够复制粘贴并运行的代码...

标签: java arrays foreach nullpointerexception


【解决方案1】:
  • 您必须在使用它之前创建数组并添加与townNames 大小相同的随机元素。像那样arr=new String[townNames.length];

你可以试试这个代码:

protected static Random generator = new Random();  
protected static String[] townNames = { "Paris", "Sofia", "Wiena", "Amsterdam" };
protected static String[] arr;

public static void main(String[] args) {
// We create an array with same size as a townNames 
arr=new String[townNames.length];

for (int i = 0; i < townNames.length; i++) {
arr[i] = townNames[generator.nextInt(townNames.length)];
}

for (String i : arr) {
System.out.println(i);
}
}

【讨论】:

  • 您的回答是否添加了我在我的未提及的内容?只是想理解为什么你觉得你必须指出我半小时前已经做过的完全相同的事情......因为你做的是townNames.length而不是4或什么?对我来说,感觉有点像你在劫持我在 cmets 和我自己的回答中告诉 OP 的内容......
  • @dingalapadum 因为在看你的回答之前我已经回答过了,但是我看不出有什么问题
  • 这不是一个真正的问题。就像您说的那样:“在发布自己的答案之前,您甚至都懒得看其他答案在说什么”。我更喜欢干燥的东西:en.wikipedia.org/wiki/Don%27t_repeat_yourself 显然,对你来说,这不是关于 提高 SO 的质量,而是让你的答案在那里......无论如何,没关系。
【解决方案2】:

您的代码有几处错误,可能还有更多,具体取决于“周围”的内容,而您没有向我们展示。无论如何,我可以立即发现的一些问题是:

  • towns 在哪里?你的意思是townNames?您的代码甚至可以这样编译吗?
  • 在java中你没有size用于数组,而是length
  • 您永远不会初始化数组arr。 (这可能是您的 NullPointer-Exception 的来源。

尝试一下。

arr = new String[4];

这是我在运行之前编辑的代码:

在一个名为myApp.java的文件中:

import java.util.Random;

public class myApp{

    protected static Random generator = new Random();

    protected static String[] townNames = { "Paris", "Sofia", "Wiena", "Amsterdam" };
    protected static String[] arr;

    public static void main(String[] args) {

        arr = new String[townNames.length];

        for (int i = 0; i < townNames.length; i++) {
             arr[i] = townNames[generator.nextInt(townNames.length)];
        }

        for (String i : arr) {
            System.out.println(i);
        }

    }

}

希望您能在其中找到所需的一切。我建议你 diff 这个针对你的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 2017-08-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多