从String列表中创建一个随机整数

时间:2014-05-29 08:26:58

标签: java string random integer

我试图随机化一些已经转换为整数的字符串 但问题是,我的编码引发了以下例外:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "1 2 3 4 5"

这是我的代码:

  int sample = Integer.parseInt(jTextField1.getText());            
  int foo = Integer.parseInt(jTextArea1.getText());            
  String a = "";
  Random randomGenerator = new Random();
  {
      for (int i = 1; i <= sample; i++) {
      int randomInt = randomGenerator.nextInt(foo);
      a = a + i + foo + "\n";
      jTextField2.setText("" + randomInt + a + "\n");                    
  }

我做错了什么?

1 个答案:

答案 0 :(得分:1)

当某个方法作为数字解析为方法但该方法无法将其识别为数字时,会导致NumberFormatException。例如,在您的代码中,此行可能会抛出此异常。

Integer.parseInt(jTextField1.getText());

如果文本字段中的文本类似于"1 2 3 4 5",则该方法无法将其转换为单个int,因此会抛出错误。您需要验证输入以确保它是合适的单个数字,例如“1”或“273”或某些此类数字。

您可以使用所谓的try-catch块,它会尝试执行此操作,但如果失败则可以定义替代行为。例如;

try{
    int sample = Integer.parseInt(jTextField1.getText());            
    int foo = Integer.parseInt(jTextArea1.getText());
} catch (NumberFormatException e){
    System.out.println("The text fields do not contain an appropriate number"); 
} 

上面的示例尝试将这两个Strings解析为数字,但如果失败,则捕获NumberFormatException抛出然后运行catch块。

在我看来,您需要对“异常处理”进行一些阅读。我希望这会有所帮助。


我编写了一个示例,说明您在下面尝试实现的目标;

public String randomiseStringOfNumbers(String numbers) throws NumberFormatException{
    String[] sNumbers = numbers.split(" ");
    ArrayList<Integer> iNumbers = new ArrayList<Integer>();
    for(String s : sNumbers){
        iNumbers.add(Integer.parseInt(s));
    }
    Collections.shuffle(iNumbers);
    String sn = "";
    for(Integer i : iNumbers){
        sn = sn + i.toString() + " ";
    }
    return sn;
}

此方法采用String中由空格分隔的一组数字。如果解析为此方法的String不遵循该格式,则该方法将像以前一样抛出NumberFormatException