我正在尝试解决以下问题:
实现一个名为TriangleArray的类,它具有以下内容: 不允许其他实例变量或常量。
- 一个名为list的实例变量,它是一个Triangle对象数组。
- 不允许使用其他实例变量或常量。
- 只有一个构造函数有两个整数参数。名为number的第一个参数是 列表的长度。第二个名为maxSize的参数是
允许的最大大小- 构造函数将列表初始化为Triangle对象数组。
- 每个Triangle对象的边是随机生成的整数,范围从1到 MAXSIZE。
- 列表的getter和setter方法。
- 没有参数的最大方法。该方法返回列表中最大的三角形。
- 一个toString方法,它返回列表中每个三角形的描述。
醇>
如何在不使用其他实例变量的情况下填充完整随机对象的列表?
这是我到目前为止的代码:
import java.util.Random;
public class TriangleArray
{
private Triangle[ ] list;
// list is an array of "number" Triangle objects.
// The maximum size of each Triangle edge is "maxSize".
public TriangleArray (int number, int maxSize);
{
list = new Triangle[number];
答案 0 :(得分:1)
您可以使用函数中的局部变量执行此操作。
public TriangleArray (int number, int maxSize) {
list = new Triangle[number];
Random random = new Random();
for(int i = 0; i < number; list[i] = makeRandomTriangle(random, maxSize);
}
private function makeRandomTriangle(Random random, int maxSize) {
int a = random.nextInt(maxSize) + 1,
b = random.nextInt(maxSize) + 1;
// |a - b| <= c <= (a + b) because of the triangle inequality
int min = Math.max(a - b, b - a),
max = Math.min(maxSize, a + b);
int c = rand.nextInt((max - min) + 1) + min;
new Triangle(a, b, x);
}
答案 1 :(得分:0)
您可以使用局部变量,例如:
public TriangleArray (int number, int maxSize) {
list = new Triangle[number];
for(int i = 0; i < number; i++) {
list[i] = makeTriangle(maxSize);
}
}
private makeTriangle(maxSize) {
Random r = new Random();
do {
int first = r.nextInt(maxSize - 1) + 1;
int second = r.nextInt(maxSize - 1) + 1;
int third = r.nextInt(maxSize - 1) + 1;
int max = Math.max(first, Math.max(second, third));
} while ((2 * max) - first - second - third) > 0);
return new Triangle(first, second, third);
}
在此代码中,您永远不会创建新的实例变量。
答案 2 :(得分:0)
您无需使用实例变量来填充随机数。您可以使用java.util.Random
或Math.random
:
list = new Triangle[number];
for (int i = 0; i < list.length; i++) {
int a = (int)(Math.random() * (maxSize + 1));
int b = (int)(Math.random() * (maxSize + 1));
int c = (int)(Math.random() * (maxSize + 1));
//handle the triangle inequality:
while (c > a + b || c < Math.abs(a - b)) {
c = (int)(Math.random() * (maxSize + 1));
}
list[i] = new Triangle(a, b, c);
}
答案 3 :(得分:0)
假设Triangle
对象的构造函数如下:
public Triangle(int a, int b, int c) { ...
我们用:
初始化数组Random r = new Random(); // random number gen
for ( int i = 0; i < number; i++ ) {
int a = r.nextInt(maxSize-1) + 1; // randomly generate each side
int b = r.nextInt(maxSize-1) + 1;
int c = r.nextInt(maxSize-1) + 1; // this won't necessarily make a proper triangle
list[i] = new Triangle(a, b, c);
}
我们必须创建一个随机数生成器,然后我们必须迭代整个未创建的三角形数组并创建它们。在迭代时,我们将每一边a,b和c随机生成一个从1到maxSize的数字,然后在当前索引处创建Triangle对象。
list
是你的实例变量,同时变量a,b,c和r都是构造函数的局部变量或你放入它们的任何函数。