1

我必须有一个随机数生成器,它从用户那里获取一个数字,然后在 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;
}
}
4

3 回答 3

2

要编译该代码,请更改:

double[] arrList = ran();

至:

double[] arrList = new double[10000];

其他提示

  1. 始终复制/粘贴错误和异常输出。
  2. “我有 JApplet 编码..” 不,您发布的是基于 AWT 的java.applet.Applet. Swing 等效项是javax.swing.JApplet. 唯一使用的 Swing 组件是JOptionPane. 关于那个主题:为什么选择 AWT 而不是 Swing?出于许多放弃使用 AWT 组件的充分理由,请参阅这个关于Swing extras over AWT的答案。如果您需要支持较旧的基于 AWT 的 API,请参阅混合重量级和轻量级组件
  3. 为什么要编写小程序?如果是由于规范。老师,请参考为什么 CS 老师应该停止教授 Java 小程序
  4. resize(350, 350);这不应该在绘画方法中完成,也不应该小程序中完成。小程序的大小在 HTML 中设置。
  5. Java GUI 可能必须在多个平台、不同的屏幕分辨率和使用不同的 PLAF 上工作。因此,它们不利于组件的精确放置。要为健壮的 GUI 组织组件,请改为使用布局管理器或它们的组合,以及用于空白空间的布局填充和边框。

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

    1.
    2.

于 2013-09-19T18:44:22.693 回答
1

首先,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?),但这是一个起点。如果您显示错误消息以及您认为不起作用的内容,我们可以提供更多帮助。

于 2013-09-19T18:46:06.513 回答
0

一步一步来

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 从那里重新开始并应用您需要的东西。

于 2013-09-20T16:31:12.153 回答