gpt4 book ai didi

java - Java 中类的优化思路

转载 作者:行者123 更新时间:2023-11-30 04:06:40 26 4
gpt4 key购买 nike

这是我编写的一个类,感觉“笨重”,就像应该有更好的方法来设置它,而不需要额外的方法 setList() 来实例化数组。我试图只保留与我的问题相关的部分,以及我第一次执行时抛出运行时(而不是编译时)错误的示例。我仍然主要习惯解释型语言,因此 Java 的更严格规则需要一些时间来适应。

public class Numbersplode
{
// fields
private int before;
private int goal;
private int[] processed;

// constructors
Numbersplode(int begin, int finish)
{
this.before = begin;
this.goal = finish;
this.processed = this.setList(begin);
this.transList();
}

// mutators
private int[] setList(int begin)
{
int[] result = new int[begin];
return result;
}

public void transList()
{
// transforms the list
int count;
double temp;

for (count = 0; count < this.before; count++)
{
temp = (double)count/(double)this.before * (double)this.goal;
this.processed[count] = (int)temp;
}
}
}

看起来我应该能够避免使用 setList() 方法,但是当我尝试这个时(其他一切都相同):

public class Numbersplode
{
// fields
private int before;
private int goal;
private int[] processed = new int[before];

// constructors
Numbersplode(int begin, int finish)
{
this.before = begin;
this.goal = finish;
this.transList();
}
[..............]

我收到 java.lang.ArrayIndexOutOfBoundsException: 0 因为 processed[] 显然不能这样定义。

那个额外的类似乎解决了问题,但在我看来,构造函数应该在创建对象的同时定义这些变量,从而允许在以下位置定义数组processed同一时间就这样。

那么我缺少一个更优雅的解决方案吗?如果我在这个问题解决之前找到一个,我会将其发布在这里。

编辑

需要明确的是,如果我编译该类(甚至是从该类创建对象的程序),在实际运行该程序之前我不会遇到任何问题(因此运行时问题与编译时问题,但想要说清楚)

最佳答案

为什么还要有一个 setList() 方法——一个 private(?) 更改器(mutator)。为什么不在构造函数中简单地设置processed = new int[before]

Numbersplode(int before, int goal) {
this.before = before;
this.goal = goal;
processed = new int[before];
transList();
}

关于java - Java 中类的优化思路,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20591062/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com