我正在尝试学习 Java,基本上我的方法是采用我从 python 中学到的程序风格,并将其应用于 Java。所以我从不使用类,只是把所有东西放在一个有很多方法的类中(我只是用作 python 函数)。我想我遇到了一个问题,需要硬着头皮使用课程,但是我很难弄清楚如何去做。
为了简化我的问题(忽略糟糕的设计——这只是为了说明这一点),我有一个程序,它接受一个列表,并在 for 循环中对每个项目进行一些数学运算(在这种情况下,将 1 添加到列表的值) . 我只希望它在列表中的 2 个项目上工作,然后停止(在此示例中,它是前 2 个项目,但在我的实际程序中,它可能在列表中的任何位置)。这是类似于我已经在做的工作代码:
没有课程:
public class LearningClasses {
public static void main(String[] args) {
int[] list = new int[]{1,2,3,4,5,6,7,8,9,10};
int[] data_list = new int[list.length];
for (int current_location = 0; current_location<list.length;current_location++) {
for (int i =0; i<100; i++){
if (check_size(data_list) == false ) {
break;
}
data_list[current_location] = (list[current_location]+1);
}
}
//its done now lets print the results
for (Integer item : data_list) {
System.out.println(item);
}
}
private static boolean check_size(int[] data_list) {
// TODO Auto-generated method stub
int count = 0;
for (int item : data_list) {
if (item != 0) {
count++;
if (count>=2) {
break;
}
}
}
if (count>=2) {
return false;
} else {
return true;
}
}
}
这段代码的问题是虽然它可以工作但效率低下,因为它计算了第二个 for 循环的每次迭代的计数。在我的程序中,我不能在第一个之上放置任何东西,for loop
但我可以在它之下放置任何东西,所以我认为不是每次都进行计数,也许我可以使用一个类来以某种方式维持状态并增加数字,而不是每次都重新计算。
与类:
public class LearningClassesCounter {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] list = new int[]{1,2,3,4,5,6,7,8,9,10};
int[] data_list = new int[list.length];
for (int current_location = 0; current_location<list.length;current_location++) {
//can only put commands in here. Nothing above.
Counter checker = new Counter(data_list);
System.out.println(checker.check_data());
for (int i =0; i<100; i++){
data_list[current_location] = (list[current_location]+1);
}
}
//its done now lets print the results
for (Integer item : data_list) {
System.out.println(item);
}
}
}
class Counter {
private int count; // current value
private boolean continue_or_not;
private int[] data_list;
// create a new counter with the given parameters
public Counter(int[] data_list) {
data_list = this.data_list;
count = 0;
continue_or_not = true;
}
public boolean check_data() {
// TODO Auto-generated method stub
int count = 0;
for (int item : data_list) {
if (item != 0) {
count++;
if (count>=3) {
break;
}
}
}
if (count>=3) {
return false;
} else {
return true;
}
}
// increment the counter by 1
public void increment() {
count++;
}
// return the current count
public int value() {
return count;
}
}
这不起作用,因为它认为 data_list 是一个空指针(我知道我将它声明为空,但如果我将它设为私有 int[] data_list = data_list 它也不会编译)。我的最终目标是进行某种控制,在这种情况下将其限制为 2 个项目,但我还想添加其他限制,例如所有项目的总价值不能超过 X 或不能低于 X,并希望通过以下方式节省 CPU 功率不必每次都进行完整的计算。所以我认为我需要能够增加这些值,然后需要检查这些增量是否超过阈值。
谁能帮我理解我做错了什么?我只是语法错误吗?还是我设计错了?