定义方法和变量

时间:2014-04-30 18:59:53

标签: variables methods static

我是初学者,我正在努力了解什么是静态,私有,公开。请参阅我写的以下示例。它有效,但我怀疑这是否是定义变量和方法的正确方法。提前谢谢!

import java.util.Scanner;
import java.util.Date; 
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class Biorhytm {

private static String nameOne;
private static String nameTwo;
private static String dobOneIn;
private static String dobTwoIn;
private static Date dobOne;
private static Date dobTwo;
static int diff;

public static Date getDobOne() {
    return dobOne;
    }

public static void setDobOne(Date dobOne) {
    Biorhytm.dobOne = dobOne;
    }

public static Date getDobTwo() {
    return dobTwo;
    }

public static void setDobTwo(Date dobTwo) {
    Biorhytm.dobTwo = dobTwo;
    }

public static String getDobOneIn() {
    return dobOneIn;
    }

public static void setDobOneIn(String dobOneIn) {
    Biorhytm.dobOneIn = dobOneIn;
    }

public static String getDobTwoIn() {
    return dobTwoIn;
    }

public static void setDobTwoIn(String dobTwoIn) {
    Biorhytm.dobTwoIn = dobTwoIn;
    }

public static String getNameOne() {
    return nameOne;
    }

public static void setNameOne(String nameOne) {
    Biorhytm.nameOne = nameOne;
    }

public static String getNameTwo() {
    return nameTwo;
    }

public static void setNameTwo(String nameTwo) {
    Biorhytm.nameTwo = nameTwo;
    }

public static int diffCalc() {
    return diff = Math.abs((int)((getDobOne().getTime() - getDobTwo().getTime()) / (24 * 60 * 60 * 1000)));
}

public static void main(String[] args) {

        float physicalBio;
        float emotionalBio;
        float intellectualBio;
        boolean validEntry;

        Scanner input = new Scanner(System.in);

        SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
        SimpleDateFormat format2 = new SimpleDateFormat("EEEE, MMMM d, yyyy", java.util.Locale.US);

        System.out.println("Enter name of first person!");
        setNameOne(input.nextLine());

            if (getNameOne().equals("")) {
                setNameOne("first person");
            }

            System.out.println("Enter name of second person!");
            setNameTwo(input.nextLine());

            if (getNameTwo().equals("")) {
                setNameTwo("second person");
            }

         do {
                try {
                    System.out.println("Enter date of birth of " + getNameOne() + "! (MM/DD/YYYY)");
                    setDobOneIn(input.nextLine());
                    setDobOne(format.parse(getDobOneIn()));
                    validEntry = true;
                    }
                catch (ParseException e) {
                    validEntry = false;
                     }
            } while (!validEntry);

         do {
                try {
                    System.out.println("Enter date of birth of " + getNameTwo() + "! (MM/DD/YYYY)");
                    setDobTwoIn(input.nextLine());
                    setDobTwo(format.parse(getDobTwoIn()));
                    validEntry = true;
                    }
                catch (ParseException e) {
                    validEntry = false;
                     }
            } while (!validEntry);

        System.out.println();
        System.out.println("DOB of " + getNameOne() + ": " + format2.format(getDobOne()) + ".");
        System.out.println("DOB of " + getNameTwo() + ": " + format2.format(getDobTwo()) + ".");
        System.out.println("Difference between DOBs (days): " + diffCalc() + ".");

        physicalBio = diffCalc() % 23;
        emotionalBio = diffCalc() % 28;
        intellectualBio = diffCalc() % 33;

        physicalBio /= 23;
        emotionalBio /= 28;
        intellectualBio /= 33;

        if (physicalBio > 0.5) {
            physicalBio = 1 - physicalBio;
        }

        if (emotionalBio > 0.5) {
            emotionalBio = 1 - emotionalBio;
        }

        if (intellectualBio > 0.5) {
            intellectualBio = 1 - intellectualBio;
        }

        physicalBio = 100 - (physicalBio * 100);
        emotionalBio = 100 - (emotionalBio  * 100);
        intellectualBio = 100 - (intellectualBio * 100);

        System.out.println("Physical compatibility: " + java.lang.Math.round(physicalBio) + " %.");
        System.out.println("Emotional compatibility: " + java.lang.Math.round(emotionalBio) + " %.");
        System.out.println("Intellectual compatibility: " + java.lang.Math.round(intellectualBio) + " %.");

}

}

2 个答案:

答案 0 :(得分:0)

你宁愿让你的生物节律课程代表一个人的数据。所以你要创建它的两个实例(比如称它们为“一个”和“两个”)并使它们成为非static。它将有实例变量,而不是静态变量,代表姓名和出生日期。

class Biorhythm {
    private Date dob;
    private String name;

    Biorhythm(String name, Date dob) {
        this.name = name;
        this.dob = dob;
    }

    public String getName() {
      return name;
    }

    public Date getDob() {
      return dob;
    }
}

public static void main(String[] args) {
    Date onedob = /* implementation omitted */
    Biorhythm one = new Biorhythm("maxval", onedob);
    System.out.println("one: name=" + one.getName() + " date=" + one.getDob());
    /* and so forth */
}

您实际上并不需要setXXX()方法,因为这些值可能不会在您的程序中发生变化。

现在在main()方法中创建此类的两个实例。我将暂时将计算方法的实现作为练习,因为实现它们会有几个不错的设计(就你提出的面向对象的问题而言)。

答案 1 :(得分:0)

首先让我解释一下这些关键字是什么 - private,default,protected.public是访问规范。 公众 - 正如所说的那样,可以随处访问,所有成员都可以公开。 如果继承,可以在包外部访问protected。 包中的默认访问权限,所有成员都可以是默认的。 私有范围属于类,不能继承。 请记住,这些可以与变量,方法甚至类一起使用。

static-可以在不需要调用方法或使用对象访问变量时使用。        静态成员不属于对象,并在加载类时初始化。 对于前:     

class Converter{
    public static long convert(long val){
    return val;
    }
    class User{
    long value=Converter.convert(500);//calling convert with class name}