Определение методов и переменных

Я новичок, и я пытаюсь понять, что такое статическое, частное, публичное. Пожалуйста, см. Следующий пример, написанный мной. Это работает, но у меня есть очень большие сомнения в том, что это правильный способ определения переменных и методов. Заранее спасибо!

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 ответа

Вы предпочли бы, чтобы ваш класс Biorhythm был чем-то, представляющим данные об одном человеке. Поэтому вы должны создать два экземпляра (назовите их "один" и "два", скажем) и сделайте их non- 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(). В настоящее время я оставлю реализацию методов расчета как упражнение, так как для их реализации было бы несколько достойных проектов (с точки зрения объектно-ориентированного вопроса, который вы задали).


Сначала позвольте мне объяснить, что эти ключевые слова are- private, default, protected.public являются ДОСТУПНЫМИ КОНЦЕПЦИЯМИ. общественность, как говорится в слове, может быть доступна повсюду, и все участники могут быть публичными. protected - можно получить за пределами пакета в случае наследования. доступ по умолчанию доступен в пакете, и все участники могут быть по умолчанию. private-scope лежит внутри класса, не может быть унаследован. И помните, что они могут использоваться с переменными, методами, даже классами.

static - может использоваться, когда нет необходимости вызывать методы или обращаться к переменным с объектами. статические члены не принадлежат объекту и инициализируются во время загрузки класса. например:

класс Конвертер {
public static long convert (long val) {
return val;
}
class User {
long value = Converter.convert(500);//вызов преобразования с именем класса}

licensed under cc by-sa 3.0 with attribution.