2013-10-22 4 views
-1
public class Time { 

    public int Minutes, Hours, TotalMin; 
    private String correctedMinutes ; 
    public String valid, TimeofDay; 
    public static int error; 


    //----------------------------------------------------------------- 
    // Sets up the time by defining its minutes and hours 
    //----------------------------------------------------------------- 
public Time(int hours, int minutes) 
    { if (minutes>59|| minutes<0|| hours>23 || hours<0) 
       { Hours=0; 
     Minutes=0; 
      error=1;} 


     else 
     {Minutes=minutes; 
     Hours=hours; 
      error=0;} 

     } 

public String Time2(int hours, int minutes, String timeofday) { 
     if (Hours>12 || Hours<0) 
     return "This is not a valid number of hours"; 
     Hours=0; 

     if (minutes>59|| minutes<0) 
       {Minutes=0; 
       error=1; 
       return "This is not a valid number of minutes";} 

     if (!timeofday.equals ("AM") || !timeofday.equals ("PM")) 
     {TimeofDay.equals("AM"); 
     return "You incorrectly enetered AM or PM";} 


       else 
       { Hours=hours; 
      Minutes=minutes; 
       return "";} 


      } 

    //---------------------------------------------------------- 
    // 
    // 
    //----------------------------------------------------------- 

public int addMinutes (int hours, int minutes, int elapsedMin) 
    { 
     if (elapsedMin<0) 
     return error=1; 

      else { 
      TotalMin=elapsedMin+Minutes; 
        return error=0;} 
     }{ 

    while (TotalMin>60) 
      {TotalMin=TotalMin-60; 
      Hours=Hours+1; if (Hours==25) 
      { Hours=0;} 

      Minutes=TotalMin; 
      } 



    } 
    //---------------------------------------------------------- 
    // 
    // 
    //----------------------------------------------------------- 

     public String toString() 
     { 
      String correctedMinutes = String.format("%02d", Minutes); 
      return (Hours+ ":" + correctedMinutes + TimeofDay);  } 

테스트 클래스NullPointerException이

public class TimeTest { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 


int minutes, hours, elapsedMin; 
String timeofday, startTime; 

Scanner scan=new Scanner (System.in); 

System.out.println("Please enter starting hour (1-12):"); 
hours=scan.nextInt(); 
System.out.println("Please enter starting minute (0-59):"); 
minutes=scan.nextInt(); 
System.out.println("Please enter AM or PM:"); 
timeofday=scan.next(); 


Time classtime = new Time (hours, minutes); 

if (Time.error!=0) 
    System.out.println("This is an invalid time"); 


System.out.print(classtime.Time2(hours, minutes, timeofday)); 

{ 
    if (Time.error!=0) 
     System.out.println("This is an invalid time"); 





System.out.print("The class begins at "); 
System.out.println (classtime.toString()); 

startTime=classtime.toString(); 

System.out.println("Enter a time in minutes representing the class duration:"); 
elapsedMin=scan.nextInt(); 

classtime.addMinutes (hours, minutes, elapsedMin); 
System.out.println (classtime.toString()); 


System.out.print(elapsedMin + " minutes after "+ startTime + " is "); 
System.out.println (classtime.toString()); 





System.out.print("The class ends at "); 
System.out.println (classtime.toString()); 


System.out.print("The class ends at "); 

System.out.print("MILITARY"); 
}}} 
import java.util.Scanner; 

그것은 나에게 오류

Exception in thread "main" java.lang.NullPointerException 
at Time.Time2(Time.java:39) 
at TimeTest.main(TimeTest.java:29) 

를주고 당신은 어떤이있는 경우, 그래서이,이 코드의 유일한 문제는 아니라는 것을 알고 조언 나는 모두 귀입니다.

+0

'Time.java'의 39 번째 줄을 게시 할 수 있습니까? – Vidya

+0

"내 코드가 뜨거운 엉망처럼 보이므로 나와 함께 감내해야한다는 것을 알고있다 ....."코드를 뜨거운 엉망으로 만드는 것은 우리의 이익이 아니라 귀하의 이익을위한 것입니다. 적절한 형식을 지정하면 장기적으로 많은 골칫거리를 줄일 수 있습니다. –

+0

글쎄, 데니스, 당신이 그 문제를 알아낼 수 없다는 것은 너무나 난장판이 아니 었습니다. 하지만 네, 적절한 형식이 정말 도움이됩니다. – Vidya

답변

1

내 생각 엔 오류가 여기에 있다는 것입니다 : 단지 TimeofDayAM 여부를 확인

TimeofDay.equals("AM"); 

(하지만 당신은 결코 함수의 반환 값을 사용하지 않는, 그래서를 던질 것보다 다른 많은 일을하지 않습니다 TimeofDaynull 일 때 NullPointerException).

아마도 값을 할당하려 했습니까?

TimeofDay = "AM"; 
+0

나는 그것도 생각했다. 그 변수가 설정되는 다른 곳은없는 것 같습니다. –

+0

정말요? 그 이유는 문자열 변수와 =는 숫자 변수를 위해서만 사용 되었기 때문입니다. – user2908551

+0

@ user2908551 아니요, 항상 할당을 위해'='를 사용합니다. –

0

내 생각은 당신이 라인 5

public String valid, TimeofDay; 

에서 변수를 선언하고, 당신이 어디를 초기화하지 않고 라인 (39)에서이 변수에 등호를 사용 : 당신이 사용하는

TimeofDay.equals("AM"); 

을 초기화되지 않은 변수에 동일합니다. 이것이 NullPointerException을 얻는 이유 일 수 있습니다.