Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将现有过程代码转换为使用类?_Java_Oop - Fatal编程技术网

Java 如何将现有过程代码转换为使用类?

Java 如何将现有过程代码转换为使用类?,java,oop,Java,Oop,我正在尝试学习Java,基本上我的方法是采用我用python学习的过程风格,并将其应用到Java中。因此,我从不使用类,而是将所有内容放在一个包含许多方法的类中(我只是将其用作python函数)。我想我遇到了一个问题,需要咬紧牙关使用类,但我很难思考如何去做 为了简化我的问题(忽略糟糕的设计——这只是为了说明问题),我有一个程序,它接受一个列表,并在for循环中对每个项目进行一些计算(在本例中,列表的值加1)。我只希望它在列表中的2个项目上工作,然后停止(在本例中,它是前2个项目,但在我的实际程

我正在尝试学习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;
        }
    }
}
这不起作用,因为它认为data\u list是一个null指针(我知道我将它声明为null,但是如果我将它设为private int[]data\u list=data\u list,它也不会编译)。我的最终目标是有一些控制,在这种情况下,它限制为2个项目,但我还想添加其他限制,如所有项目的总价值不能超过X或不能低于X,并希望通过不必每次进行完整计算来节省CPU功率。所以我认为我需要能够增加这些值,然后需要检查这些增量是否没有超过阈值


有人能帮我理解我做错了什么吗?难道我只是在语法上错了;还是我设计错了?

//这里只能放命令。上面没什么。 计数器检查器=新计数器(数据列表); System.out.println(checker.check_data())

当您调用checker.check_data()时,它试图通过数据_列表进行解析,但为空。因此,它抛出一个NullPointerException。
data\u list
是空的,因为在构造函数中,您可能需要像这样初始化
this.data\u list=data\u list
,而不是
data\u list=this.data\u list
(此处
this.data\u list
没有如此空的引用)


如果避免该调用,输出将为2,3,4,5,6,7,8,9,10,11。

//只能在此处输入命令。上面没什么。 计数器检查器=新计数器(数据列表); System.out.println(checker.check_data())

当您调用checker.check_data()时,它试图通过数据_列表进行解析,但为空。因此,它抛出一个NullPointerException。
data\u list
是空的,因为在构造函数中,您可能需要像这样初始化
this.data\u list=data\u list
,而不是
data\u list=this.data\u list
(此处
this.data\u list
没有如此空的引用)


如果避免该调用,输出将是2,3,4,5,6,7,8,9,10,11。

旁注:将所有内容放在一个包含许多方法的大类中,不是“函数式”,而是“过程式”。Functional的意思是“没有可变状态”或“将函数作为第一类对象”。@Thilo谢谢,我会更新标题,我真的不知道一直以来都叫它Functional:-)从某种意义上说,我们都是N00B,跳过这一点。您的代码中有一个错误-在计数器构造函数中,您可能希望这样做:this.data\u list=data\u list,否则您将为参数变量指定默认值(null)。旁注:将所有内容放在一个包含多个方法的大类中,不是“functional”,而是“procedural”。Functional的意思是“没有可变状态”或“将函数作为第一类对象”。@Thilo谢谢,我会更新标题,我真的不知道一直以来都叫它Functional:-)从某种意义上说,我们都是N00B,跳过这一位。代码中有一个错误-在计数器构造函数中,您可能希望改为:this.data\u list=data\u list,否则您将默认值(null)分配给参数变量。啊,只需切换this…我认为这引用的是传入变量,而不是类中引用的变量。感谢简单的错误。啊,只需要切换这个…我认为这是指传入变量,而不是类中引用的变量。谢谢你犯了一个简单的错误。
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;
    } 
}