Я изучаю информатику, и моя домашняя работа находилась на следующий день.Как работают операторы на Java и почему этот метод возвращает значение null?
Метод getNextDay()
возвращает null и не выполняет мои If
заявления.
Вот два класса, которые используются:
public class NextDay {
public static void main(String args[]) throws Exception {
Date dateObj = new Date(30, 3, 2016);
System.out.println("Altes Datum: " + dateObj.gibTag() + "." + dateObj.gibMonat() + "." + dateObj.gibJahr() + ".");
System.out.println("Der naechste Tag ist der " + dateObj.getNextDay().toString() + ".");
}
}
public class Date {
int tag;
int monat;
int jahr;
public Date(int tag, int monat, int jahr){
this.tag = tag;
this.monat = monat;
this.jahr = jahr;
}
public Date getNextDay() throws Exception{
if(monat == 2){
// wenn Februar 29 Tage hat.
if(jahr % 4 == 0 | jahr % 400 == 0){
if(tag > 0 & tag < 29){
return new Date(tag + 1, monat, jahr);
}
else if(tag == 29 & monat == 2){
return new Date(tag - tag + 1, monat + 1, jahr);
}else{
throw new Exception("Im Februar können Sie nur bis 28 schreiben!");
}
}
// wenn Februar 28 Tage hat.
if(jahr % 4 != 0 | jahr % 100 != 0 & monat == 2){
if(tag > 0 & tag < 28){
return new Date(tag + 1, monat, jahr);
}else if(tag == 28 & monat == 2){
return new Date(tag - tag + 1, monat + 1, jahr);
}
else{
throw new Exception("Im Februar können Sie nur bis 28 schreiben!");
}
}
}
if(monat != 2 & monat == 1 & monat == 3 & monat == 5 & monat == 7 & monat == 8 & monat == 10 & monat == 12){
if(tag <= 31 & monat <= 12 & jahr > 0){
if(tag < 31){
return new Date(tag + 1, monat, jahr);
}
else if(tag == 31 & monat < 12){
return new Date(tag - tag + 1, monat + 1, jahr);
}
else if(monat == 12){
if(tag == 31 & monat == 12){
return new Date(tag - tag + 1, monat - monat + 1, jahr + 1);
}else{
return new Date(tag, monat, jahr + 1);
}
}
}
else{
throw new Exception("Sie haben ein ungültiges Datum eingegeben!");
}
}
if(monat != 2 & monat == 4 & monat == 6 & monat == 9 & monat == 11){
if(tag <= 30 & monat <= 12 & jahr > 0){
if(tag < 30){
return new Date(tag + 1, monat, jahr);
}
else if(tag == 30 & monat < 12){
return new Date(tag - tag + 1, monat + 1, jahr);
}
else if(monat == 12){
if(tag == 31 & monat == 12){
return new Date(tag - tag + 1, monat - monat + 1, jahr + 1);
}else{
return new Date(tag, monat, jahr + 1);
}
}
}
else{
throw new Exception("Sie haben ein ungültiges Datum eingegeben!");
}
}
return null;
}
public int gibTag(){
return tag;
}
public int gibMonat(){
return monat;
}
public int gibJahr(){
return jahr;
}
public String toString(){
return this.tag + "." + this.monat + "." + this.jahr;
}
}
Я бы порекомендовал вам перевести свой код на английский, прежде чем публиковать его. Поэтому людям легче понять это и помочь вам. –
одной простой причиной может быть, никакие условия блока не выполняются, так что в итоге вы получите null в обратном направлении, следовательно, нулевой указатель плюс не путайте свое соглашение об именах с API (Date - это API) –
Думаю, ему не нужно преобразовывать коды на английский. Потому что в блоке кода используется только три тега. Tag = Day, Monat = Month, Jahre = Year и gibJahr и т. Д. Средства gib = get. Нет смысла переводить. –