这怎么了?你如何构建对象和方法

时间:2013-08-05 17:08:10

标签: java object methods constructor global-variables

我是这个网站的新手,我是java的初学者。我正在制作一个程序,它需要5个数字并将它们吐出来。为什么这段代码不起作用?这是我的第一个.java。我把标记放在我认为问题出现的地方。

public class digitExtractor {
    int tNumber;
    String sNumber;

    // OP thinks the problem is here...
    public digitExtractor(int tNumber) {       


    }
    // ... and here
    public digitExtractor(String sNumber) {



    }

    public void returnInvertedOrderByMath() {
        int Integer1;
        int Integer2;
        int Integer3;
        int Integer4;
        int Integer5;
        Integer1 = (tNumber % 10);
        Integer2 = (tNumber % 100) / 10;
        Integer3 = (tNumber % 1000) / 100;
        Integer4 = (tNumber % 10000) / 1000;
        Integer5 = (tNumber % 100000) /10000;

        System.out.println(Integer1 + "\n" + Integer2 + "\n" + Integer3 + "\n" + Integer4 + "\n" + Integer5);
    }

    public void returnInvertedOrderByString() {
        char part1;
        char part2;
        char part3;
        char part4;
        char part5;
        part1 = sNumber.charAt(4);
        part2 = sNumber.charAt(3);
        part3 = sNumber.charAt(2);
        part4 = sNumber.charAt(1);
        part5 = sNumber.charAt(0);
        System.out.println(part1 + "\n" + part2 + "\n" + part3 + "\n" + part4 + "\n" + part5);

    }
}

3 个答案:

答案 0 :(得分:0)

我认为你想要的是初始化你的构造函数中的实例字段。

public digitExtractor(int tNumber)中,你会有一个身体:

// assigning instance field with constructor's argument value
this.nNumber = tNumber; 

public digitExtractor(String sNumber)中,你会有一个身体:

// assigning instance field with constructor's argument value
this.sNumber = sNumber; 

这样,您的returnInvertedOrder将引用已初始化的DigitExtractor字段,然后执行您要执行的操作。

请注意,这对于String字段尤其重要,因为如果在您的代码中引用它之前尚未初始化它,则会抛出NullPointerException

如果未初始化,int将默认为0

答案 1 :(得分:0)

这应该工作时请记住,我在您的程序中添加了一个主要方法来测试您的代码 并查看我添加到您的代码中的评论。

public class DigitExtractor {
    private int tNumber;
    private String sNumber;

    public static void main(String[] args){

        //this will work because i chose the right constructor
        DigitExtractor d = new DigitExtractor(10000);
        d.returnInvertedOrderByMath();

        //this wont work because sNumber is null
        //d.returnInvertedOrderByString
    }

    public DigitExtractor(int tNumber) {
        this.tNumber = tNumber;
    }
    public DigitExtractor(String sNumber) {
        this.sNumber = sNumber;
    }

    public void returnInvertedOrderByMath() {
        int Integer1 = (tNumber % 10);
        int Integer2 = (tNumber % 100) / 10;
        int Integer3 = (tNumber % 1000) / 100;
        int Integer4 = (tNumber % 10000) / 1000;
        int Integer5 = (tNumber % 100000) /10000;

        System.out.println(Integer1 + "\n" + Integer2 + "\n" + Integer3 + "\n" + Integer4 + "\n" + Integer5);
    }

    public void returnInvertedOrderByString() {
        char part1 = sNumber.charAt(4);
        char part2 = sNumber.charAt(3);
        char part3 = sNumber.charAt(2);
        char part4 = sNumber.charAt(1);
        char part5 = sNumber.charAt(0);

        System.out.println(part1 + "\n" + part2 + "\n" + part3 + "\n" + part4 + "\n" + part5);

    }
}

答案 2 :(得分:0)

int tNumber; // This is an instance variable as it belongs to the class
String sNumber;

// This is a constructor which takes an integer
public digitExtractor(int tNumber) {  // tNumber here is a parameter which is not the same as tNumber above. You can change the name of this parameter to anything you like     
    // "this" keyword tells us we are referring to instance variable and assigning the value of tNumber parameter to instance one
    this.tNumber = tNumber; 
}

public digitExtractor(String sNumber) {
    if (sNumber == null){
        this.sNumber = ""; // if null, let's put an empty string as default
    } else {
        this.sNumber = sNumber;
    }
}