【问题标题】:Add random numbers to array list将随机数添加到数组列表
【发布时间】:2013-09-24 23:17:03
【问题描述】:

我必须有一个随机数生成器,它从用户那里获取一个数字,然后在 1 和用户数之间生成 10000 个随机数,然后计算最小值、最大值和平均值。这是我到目前为止所拥有的。我被困在 actionPerformed 方法上。我是个菜鸟,所以请尝试解释你的答案。

我的问题

我对 JApplet 进行了编码,只是无法确定执行的操作方法。我在谷歌上下搜索了帮助以及本周本书附录 c 中涵盖的章节,但他们没有解释如何做我们被要求做的事情。我自己完成了课堂上的所有其他作业,但似乎无法完成这项作业,到目前为止我已经花费了 19 个小时。

如何获取所有添加到数组列表中的数字?

package randomNums;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import static java.lang.Math.*;

import javax.swing.*;

import java.applet.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Random;

public class RandomNums extends Applet implements ActionListener {
/**
 * 
 */

// PAINT METHOD
public void paint(Graphics g)

{

    Font font = new Font("Arial", Font.BOLD, 18);
    g.setFont(font);
    g.setColor(Color.WHITE);
    g.drawString("Enter A Number", 70, 25);
    resize(350, 350);
    this.setBackground(Color.BLUE);

}

// CREATES OBJECTS
private static final long serialVersionUID = 1L;
TextField text1, text2, text3, text5;
Label label1, label2, label3, label4;
Button button;
Font font = new Font("Arial", Font.BOLD, 11);
private double all;

// INIT METHOD
public void init() {
    setLayout(null);
    repaint();

    // YOUR NUMBER LABEL
    label1 = new Label("Your Number ");
    label1.setBounds(25, 35, 100, 20);
    setFont(font);
    add(label1);

    // YOUR NUMBER ENTRY
    text1 = new TextField(5);
    text1.setBounds(150, 30, 100, 25);
    add(text1);

    // MAXIMUM
    label2 = new Label("The Maximum Number Is: ");
    label2.setBounds(25, 100, 150, 25);
    setFont(font);
    add(label2);

    // MAXIMUM ANSWER
    text2 = new TextField(5);
    text2.setBounds(180, 100, 50, 25);
    add(text2);

    // MINIMUM
    label3 = new Label("The Minimum Number Is: ");
    label3.setBounds(25, 170, 150, 25);
    setFont(font);
    add(label3);

    // MINIMUM ANSWER
    text5 = new TextField(5);
    text5.setBounds(180, 170, 50, 25);
    add(text5);

    // MEAN
    label4 = new Label("The Mean is: ");
    label4.setBounds(25, 135, 150, 25);
    setFont(font);
    add(label4);

    // MEAN ANSWER
    text3 = new TextField(5);
    text3.setBounds(180, 135, 50, 25);
    add(text3);

    // BUTTON
    button = new Button("Enter");
    button.setBounds(90, 70, 100, 20);
    add(button);

    // ACTION LISTENER
    button.addActionListener(this);
  }

public void actionPerformed(ActionEvent ae) {
    Random ran = new Random(10000);
     
    try {
        //NOT SURE HOW TO GET ALL OF THE NUMBERS ADDED TO THE ARRAY LIST
        double[] arrList = ran();
         //THIS  IS NOT WORKING RIGHT ONLY STORING ONE VALUE
         all = ran.nextDouble();
         for (int i = 0; i < arrList.length; i++) {
             System.out.println(arrList[i] + " ");

        
         //THIS IS IN THERE FOR MY TESTING PURPOSES NEED TO TAKE OUT BEFORE SUBMITTING
         System.out.println(arrList);
        
         final double TIMES = (double) 10000;
        final String LIMIT = text1.getText();
        Double.parseDouble(LIMIT);
        
        //FOR LOOP
        for (int x = 1; x < TIMES; ++x);
        
        //SETS TEXT FOR MIN BOX (NOT SURE IF IT IS DOING THE CALCULATIONS   RIGHT)
        text5.setText(ran.nextDouble() + "");
        
        
        
//my comment: another variable after for loop to get mean , fix numbers being saved to an    array so they can be added and divided to get mean,   
    }
    }

    catch (NumberFormatException m) {
        if (getText(text1) == 0)
            JOptionPane.showMessageDialog(this,
                    "Please enter a number between 1-    10,000");
    }

}

private int getText(TextField text12) {
    // TODO Auto-generated method stub
    return 0;
}
}

【问题讨论】:

  • 你能说明你遇到了什么错误吗?

标签: java swing random arraylist applet


【解决方案1】:

一步一步来

1- 设计一个 SSCCE,在将其实现到小程序之前正确执行基本操作,这是我写的一个快速的:

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class main
{
public static void main(String args[])
{
    Random rand = new Random();
    ArrayList<Integer> array = new ArrayList<Integer>();
    int x ;
    int sum = 0;
    System.out.print("Input a number: ");
    Scanner input = new Scanner(System.in);
    int mean;
    int temp = input.nextInt();

    for(int i = 0;i < 10000;i++)
    {
        x = Math.abs(rand.nextInt()%temp)+1;
        System.out.println(x);
        array.add(x); //add random number to array
        sum += x; //compute sum ro calculate mean later;
    }

    int min = array.get(0);
    int max = array.get(0);


    //find min

    for(int i = 0; i < array.size();i++)
    {
        if(array.get(i) < min)
        {
            min = array.get(i);
        }
    }

    //find max

    for(int i = 0; i < array.size();i++)
    {
        if(array.get(i) > max)
        {
            max = array.get(i);
        }
    }

    //find mean
    mean = sum/array.size();

    //result
    System.out.println("Min is : "+min);
    System.out.println("Max is : "+max);
    System.out.println("Sum is : "+sum);
    System.out.println("Mean is : "+mean);
}
}

现在您已经完成了核心目标,是时候将其集成到 JApplet 中了。 查看http://docs.oracle.com/javase/tutorial/uiswing/components/applet.html 从那里重新开始,应用你需要的东西。

【讨论】:

  • 哇,你不知道你刚刚改善了我的周末多少。我想通了并实施了。你就像我周末的英雄一样,谢谢。我儿子也谢谢你,这样我这个周末就可以去看他的足球比赛,而不会被困在家里,用这该死的东西把我的头撞到墙上。
【解决方案2】:

要编译该代码,请更改:

double[] arrList = ran();

收件人:

double[] arrList = new double[10000];

其他提示

  1. 始终复制/粘贴错误和异常输出。
  2. “我有 JApplet 编码..” 不。您发布的是基于 AWT 的 java.applet.Applet。 Swing 等效项是javax.swing.JApplet。唯一使用的 Swing 组件是 JOptionPane。关于那个主题:为什么选择 AWT 而不是 Swing?请参阅Swing extras over AWT 上的这个答案,因为有很多放弃使用 AWT 组件的充分理由。如果您需要支持较旧的基于 AWT 的 API,请参阅 Mixing Heavyweight and Lightweight Components
  3. 为什么要编写小程序?如果是由于规范。老师请发给Why CS teachers should stop teaching Java applets
  4. resize(350, 350); 这不是应该在paint 方法中完成的事情,也不应该永远在applet 中完成。小程序的大小在 HTML 中设置。
  5. Java GUI 可能必须在多个平台、不同的屏幕分辨率和使用不同的 PLAF 上工作。因此,它们不利于组件的精确放置。要为强大的 GUI 组织组件,请改用布局管理器或 combinations of them,以及 white space 的布局填充和边框。

    Java GUI 可能必须在多个平台、不同的屏幕分辨率和使用不同的 PLAF 上工作。因此,它们不利于组件的精确放置。要为强大的 GUI 组织组件,请改用布局管理器或 combinations of them1,以及 white space2 的布局填充和边框。

    1.
    2.

【讨论】:

    【解决方案3】:

    首先,new Random(10000) 创建一个新的 Random 对象,其种子为 10000,而不是一个范围高达 10,000 或创建 10,000 个数字的对象。请参阅http://docs.oracle.com/javase/6/docs/api/java/util/Random.html 的 javadocs。再读一遍。

    double[] arrList = ran()——这行不通,因为它没有任何意义。请参阅http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html(滚动至创建、初始化和访问数组了解相关信息)。

    接下来,您需要使用循环(10,000 次以上)获取随机数(再次参见 Random 的 javadocs)并将其存储在数组中。

    您肯定会遇到其他错误(all 是什么?)但这是一个起点。如果您显示错误消息以及您认为不起作用的内容,我们可以提供更多帮助。

    【讨论】:

      猜你喜欢
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2015-10-01
      • 2023-04-02
      相关资源
      最近更新 更多