【发布时间】:2017-02-17 08:25:33
【问题描述】:
我正在学习计算机科学,第二天我的作业就找到了。
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 混淆(日期是一个 API)
-
我认为他不需要将代码转换为英文。因为代码块中只使用了三个标签。 Tag = Day,Monat = Month,Jahre=Year 和 gibJahr 等表示 gib = get。没有理由翻译。
-
@nickzoum 问题是使用 AND 而不是 OR,OP 使用的是按位运算符还是逻辑运算符无关紧要,重新打开。
-
@PeterLawrey 问题是在 || 时使用按位运算符是需要的。位操作符“|”可能也会起作用,这是一个错误,但我认为主要错误是使用了错误的运算符。为什么要将一个刚接触编程的人与他还不需要知道的东西混为一谈。
标签: java if-statement null operators