2013-08-28 54 views
0

我正在尝试实现将DD/MM/YY输入转换为DD/MM/YYYY输入的程序的一部分。我使用了if语句来要求程序检查输入的数字是否为< 13,如果是,则将2000添加到输入数字 - 如果输入12,则输出2012。如果数量> 13 < 100,我已要求计划增加1900If语句的编译错误

我很新的Java和我遇到,我一直无法克服到目前为止(从36上下两个编译器错误,哈哈)。编译器错误是“不是一个声明”。这两个引用与else语句的行。代码如下(显然还是在制品和未完成的计划至今) -

import java.util.*; 

public class FindDay4Birthdate 
{ 
    public static void main(String[] args) 
    { 
     String dayInput = ""; 
     String monthInput = ""; 
     String yearInput = ""; 
     int bday; 
     int bmonth; 
     int byear; 

     String daysList[] = { 
      "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" 
     }; 
     String monthList[] = { 
      "January", "Feburary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" 
     }; 

     Scanner sc = new Scanner(System. in); 
     sc.useDelimiter("[-/.\\s]"); 

     System.out.print("Please enter your date of birth (dd/mm/yyyy) - "); 

     if (sc.hasNext()) 
     { 
      dayInput = sc.next(); 
      monthInput = sc.next(); 
      yearInput = sc.next(); 

      bday = Integer.parseInt(dayInput); 
      bmonth = Integer.parseInt(monthInput); 
      byear = Integer.parseInt(yearInput); 


     } // end if statement 

     if (byear = (byear > 0)); 
     { 
      if (byear = (byear < 13)) 
      { 
       byear = (byear + 2000); 
      } 
      else(byear = (byear > 13 && byear < 100)); 
      { 
       byear = (byear + 1900); 
      } 
     } // end if statement 


     bmonth -= 1; //set month to correct array 

     String day = daysList[bday]; 
     String month = monthList[bmonth]; 

     int yearCount = (byear - 1901); 
     int daysInYear = 365; 
     int dayCount = (daysInYear * yearCount); 

     System.out.println("You were born on " + day + " " + bday + " " + month + " " + byear); 

     System.out.println(yearCount + " " + daysInYear + " " + dayCount); // test output only 

     /* Todo 
     * 
     *TASK 2 - 
     *Implement daysPerMonth - Feb set to 28 days 
     *Use count to determine correct day for birthdate 
     * 
     *TASK 3 - 
     *User input needs to allow char based months and 2 digit years need to be converted to 4 digit years 
     *Implement leap years */ 

    } 
} 
+0

'byear =(byear> 0)'你确定你知道这里发生了什么吗? –

+0

基本上我想说只要输入年份超过0,就这样做。考虑一下,如果有人输入00(2000),这将是一个问题。也许如果我使用=> 0? –

+0

多数民众赞成在Y2K问题一遍:P。但是回到原点。既然你正在检查,你不应该分配。基本上通过if。在第一行之前,例如12。下一步它是'true',然后'byear <13'没有任何意义。 –

回答

4

后删除分号你的if语句

if (byear=(byear >0)); 同样,对于以下其他还有

一如果将其视为区块的结尾,则以分号结尾。所以,你所定义的其他不被视为已preceeded它

+0

我只是偷偷摸摸,发现在我读这本书之前!当它从if(byear =(byear> 0))中移除时它工作正常,但是当我在else语句后删除分号时,程序返回了一个编译器错误,表示仍然期待分号。 –

1

一旦修复编译器错误的if语句的一部分,你将有逻辑错误,从此块

if (byear=(byear >0));{ 
     if (byear=(byear <13)); 
     { 
      byear=(byear + 2000); 
     } 
     else (byear =(byear >13 && byear <100)); 
     { 
      byear=(byear + 1900); 
     } 
    } // end if statement 

byear=(byear >0)意味着byear现在是byear>0的结果,其可以是truefalse。现在下一个条件不再有意义了。

if中的所有byear = <condition>语句改为<condition>。即(不复制粘贴,了解差异)

if (byear >0){ 
     if (byear <13); 
     { 
      byear=(byear + 2000); 
     } 
     else (byear >13 && byear <100); 
     { 
      byear=(byear + 1900); 
     } 
    } // end if statement 
1

这部分是你的问题。

if (byear = (byear > 0)); 
{ 
    if (byear = (byear < 13)) 
    { 
     byear = (byear + 2000); 
    } 
    else(byear = (byear > 13 && byear < 100)); 
    { 
     byear = (byear + 1900); 
    } 
} // end if statement 

您所做的第一个错误是if语句末尾的分号。

if (byear = (byear > 0)); // This ; symbol is to be removed 

这会导致在不执行任何语句的情况下结束if块。

下一个错误是您如何尝试比较值。这里。

byear = (byear > 0); 

此语句将与true的byear变量如果byear大于0,否则使其false这导致由于byear是一个整数,而不是一个布尔值编译错误。因此,将您的第一条语句更改为

if (byear > 0) 

请参阅,不需要将其分配给自己。以相同的方式删除所有的比较中的任务使你的错误部分

if (byear > 0); 
{ 
    if (byear < 13) 
    { 
     byear = (byear + 2000); 
    } 
    else(byear > 13 && byear < 100); 
    { 
     byear = (byear + 1900); 
    } 
} // end if statement 

现在,它应该编译。