2014-02-05 3 views
1
import java.util.*; 
import java.text.*; 
import java.io.*; 

public class AvgTime { 

static double hrs1; 
static double min1; 

public static void main(String[] args) throws InterruptedException, FileNotFoundException { 

Scanner in = new Scanner(System.in); 

System.out.print("How many times? "); 
int numOfTimes = in.nextInt(); 

double hrTotal = 0; 
double minTotal = 0; 

for (int i = 1; i <= numOfTimes; i++){ 

    System.out.println("\nEnter time in military time notation: "); 
    System.out.print("Hour "); 
    double hrs1 = in.nextDouble(); 
    System.out.print("Minute "); 
    double min1 = in.nextDouble(); 



    hrTotal += hrs1; 
    minTotal += min1; 
} 

//calculate average 
double avgHr1 = hrTotal/numOfTimes; 
double timeMin1 = Math.round(minTotal/numOfTimes); 


DecimalFormat df = new DecimalFormat("###"); 
String hours = df.format(avgHr1); 
String minutes = df.format(timeMin1); 

String time = hours+":"+minutes+":"+00; 
String mt = hours+minutes; 


    SimpleDateFormat fmtMil = new SimpleDateFormat("HH:mm:ss"); 
    Date inDate = fmtMil.parse(time, new ParsePosition(0)); 
    SimpleDateFormat fmtAMPM = new SimpleDateFormat("hh:mm:ss aa"); 
    StringBuffer outDate = fmtAMPM.format(inDate, new StringBuffer(), new FieldPosition(0)); 
System.out.println("\nThe average time is " + outDate+"\n"+mt+" in military time.\n\n"); 

    String copy = "Copying..."; 

    Thread.sleep(550); 
    for(int i = 0; i < copy.length(); i++) { 
     System.out.print(copy.charAt(i)); 
     try{ Thread.sleep(105); }catch(Exception e){} 
     } 


     PrintWriter p = new PrintWriter("Times.txt"); 
      p.println(hrs1+min1); 
      p.close(); 


     System.out.println("\nDone\n\n\n"); 
      Thread.sleep(550); 
    } 
} 

사용자가 입력 한 시간을 파일로 내보내려고합니다. 예를 들어 사용자가 numOfTimes를 2로 설정하면 hrs1과 min1에 대해 두 가지 값을 갖게됩니다. 1629 및 2018여러 값으로 변수 내보내기?

을 내가 텍스트 파일하지만 대신 'hrs1 + min1'의 나는 둘 때 단지 1629처럼 hrs1 (16)와 min1 (29)를 표시하려면 :

은 입력 말 hrs1 + min1 그냥 '0.0'을 내 보냅니다. 난 그냥 "1629"와 "2018" 을 수출하고 싶습니다.

왜 그런가요? 어떻게 수정합니까?

출력

How many times? 2 

Enter time in military time notation: 
Hour 16 
Minute 29 

Enter time in military time notation: 
Hour 20 
Minute 18 

내보낼 무엇 :

이 코드를 작동하게하는 두 가지 주요 수정 사항이 있습니다
1629 
2018 
+0

더 많은 코드를 게시 할 수 있습니까? hrTotal 및 minTotal의 선언과 같은 –

+0

물론입니다. 방금 게시했습니다. – MrAwesome8

+0

전체 또는 개별 시간/분을 인쇄 하시겠습니까? –

답변

1

. 먼저 PrintWriter을 루프 외부에서 선언하고 인스턴스화해야합니다. 그리고 println에 대한 호출은 루프 내부에서 발생해야합니다. 둘째로 double은 인쇄하기 전에 String으로 변환해야하며 적절하게 부분 문자열을 사용해야합니다.

Scanner in = new Scanner(System.in); 

    System.out.print("How many times? "); 
    int numOfTimes = in.nextInt(); 

    double hrTotal = 0; 
    double minTotal = 0; 

    PrintWriter p = new PrintWriter("Times.txt"); 

    for (int i = 1; i <= numOfTimes; i++) { 

     System.out.println("\nEnter time in military time notation: "); 
     System.out.print("Hour "); 
     double hrs1 = in.nextDouble(); 
     System.out.print("Minute "); 
     double min1 = in.nextDouble(); 

     hrTotal += hrs1; 
     minTotal += min1; 
     String hrs = String.valueOf(hrs1); 
     String min = String.valueOf(min1); 
     p.println(hrs.substring(0, hrs.indexOf(".")) + min.substring(0,min.indexOf("."))); 
    } 
    p.close(); 

이 코드가 실제 연산을 사용하여 두 배로 hrs1mins1을 추가하고 당신이 클래스의 상단에 선언 한 정적 변수를 사용하고 변경하기 전에

.

static double hrs1; 
static double min1; 

정적 두꺼운 부분은 실제로 사용되지 않으므로 제거해야합니다. println에 대한 호출이 루프 외부에 있었으므로 루프 내에서 선언되고 할당 된 hrs1mins1 대신 정적 복식이 참조되었습니다. 루프에서 선언 한 지역 변수를 사용하고 있지만 범위에 포함되지 않았다고 생각했습니다.

+0

감사합니다! 많은 감사 !!!! 나는 15 표를 얻으면 한번 투표 할 것입니다 ... – MrAwesome8

+0

@ user3250237 기꺼이 도와 드리겠습니다. 나는 또한 당신의 처음 시도에 무엇이 잘못되었는지에 대한 설명을 포함시켰다. –

+0

설명해 주셔서 감사합니다. 지금은 의미가 있습니다. 도와 주셔서 감사합니다! – MrAwesome8