2017-11-23 16 views
1

꽤 오래 동안이 숙제 작업을하고 있었고 답을 얻지 못하는 것 같습니다. 내 코드에 대한 의견을 보내 주시면 감사하겠습니다.입력 된 텍스트 파일의 최소 최대 값과 평균값

The min of [1,2,3,5,6] is 1. 
    The max of [1,2,3,5,6] is 6. 
The avg of [1,2,3,5,6] is 3.4. 
    The 90th percentile of [1,2,3,4,5,6,7,8,9,10] is 9. 
The sum of [1,2,3,5,6] is 17. 
    The 70th percentile of [1,2,3] is 2. 

을 지금까지 : 는 나는 내 작업은 입력 텍스트 파일을 읽고 다음과 같이 가 읽는 출력 텍스트 파일을 만들 수

Min: 1,2,3,5,6 
    Max: 1,2,3,5,6 
Avg: 1,2,3,5,6 
    P90: 1,2,3,4,5,6,7,8,9,10 
Sum: 1,2,3,5,6 
    P70: 1,2,3 

입니다

에 다음 한 입력 텍스트 파일이 나는 최소 최대와 평균을 시도하고있다. 나는 파일을 읽을 수있다. 나는 내가 읽은 것을 으로 출력 할 수있다. 나는 min max max 등을 찾고 그 값을 출력하는 법을 모른다. 내 입력이 문자열이기 때문에 int 값만 읽어야하기 때문에 인 것 같습니다. 여기 내 코드

import java.io.File; 
import java.util.Formatter; 
import java.util.Scanner; 

public class ExternalData { 

public static void main(String[] args) { 

    try { 
     System.out.print("Enter the file name with extension : "); 

     Scanner input = new Scanner(System.in); 

     File file = new File(input.nextLine()); 

     input = new Scanner(file); 

     while (input.hasNextLine()) { 
      int min = input.nextInt(); 
      while(input.hasNextInt()); 
      int num = input.nextInt(); 
      if(num < min) { 
       min = num; 
      } 

      while (input.hasNextLine()) { 
       int max = input.nextInt(); 
       while(input.hasNextInt()); 
       int num2 = input.nextInt(); 
       if(num2 > min) { 
        min = num; 

      String avg = input.nextLine(); 




      Formatter f = new Formatter("C:\\Users\\Kevin\\Dropbox\\Kevin 
      Carter-8042\\Intro to Soft Eng\\Task 12\\outputTest.txt"); 

      // print the formatted strings to the file 
      f.format("The min of [1,2,3,4,5,6] is " + min); 

      f.format("\n\nThe max of [1,2,3,4,5,6] is " + max); 

      f.format("\n\nThe avg of [1,2,3,4,5,6] is " + avg); 
      f.close();  
      }  

      } catch (Exception ex) { 
       ex.printStackTrace(); 
      } 

      } 

     } 
+0

이다'(input.hasNextInt은()) 동안, 입력은'int'를 포함 할 일이 생기면'영원히 반복합니다. – dasblinkenlight

+0

토큰에 따라 파일을 구문 분석합니다. 각각에 대해 '최소', '최대'등은 메소드를 트리거합니다 (스위치 케이스 사용). – AsfK

+0

잘못된 코드 외에도 여기에서 또 다른 큰 실수를하고 있습니다. 가정을하고 있습니까? 당신은 당신의 코드에 asuming을 가지고있다.''[1,2,3,4,5,6]'의 평균값이지만, 입력 파일을 변경하자마자 코드가 잘못 인쇄 될 것입니다. 코드를 충분히 일반적으로 작성하십시오. – ScriptKiddy

답변

1
package TrialPrograms; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.util.HashSet; 
import java.util.Set; 
import java.util.TreeSet; 

public class Test { 

    public static void main(String[] args) throws IOException { 



     FileInputStream fi = new FileInputStream("F:\\Test\\file.txt"); 
     FileOutputStream fo = new FileOutputStream("F:\\Test\\output.txt"); 
     BufferedReader br = new BufferedReader(new InputStreamReader(fi)); 
     BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fo)); 

     String strLine; 
     while ((strLine = br.readLine()) != null) { 

       String[] arr = strLine.split(" "); 
       String[] nos = arr[1].split(","); 

       Set<Integer> set = new HashSet<Integer>(); 
       for(int i = 0; i<nos.length; i++){ 
        int no = Integer.parseInt(nos[i]); 
         set.add(no); 
        } 
       TreeSet<Integer> sortedSet = new TreeSet<Integer>(set); 

       switch(arr[0]) { 

       case "Min:": 
        String msg1="The Min of [" +arr[1]+ "] is " +(Integer)sortedSet.first(); 
        bw.write(msg1); 
        bw.newLine(); 

        break; 

       case "Max:": 
        String msg2="The Max of [" +arr[1]+ "] is " +(Integer)sortedSet.last(); 
        bw.write(msg2); 
        bw.newLine(); 
        break; 

       case "Avg:": 
        Object[] noarray = sortedSet.toArray(); 
        int noarraysize = noarray.length-1; 
        int sum=0; 
        for(int i=0;i<=noarraysize;i++) { 

         int no=Integer.valueOf(noarray[i].toString()); 
         sum = sum + no; 
         if(i==noarraysize) { 
          String msg3="The Avg of [" +arr[1]+ "] is " +(double)sum/noarray.length; 
          bw.write(msg3); 
          bw.newLine(); 
                } 
        } 
        break; 

       case "Sum:": 
        Object[] noarray1 = sortedSet.toArray(); 
        int noarraysize1 = noarray1.length-1; 
        int sum1=0; 
        for(int i=0;i<=noarraysize1;i++) { 
         int no=Integer.valueOf(noarray1[i].toString()); 
         sum1 = sum1 + no; 
         if(i==noarraysize1) { 
          String msg4="The Sum of [" +arr[1]+ "] is " +sum1; 
          bw.write(msg4); 
          bw.newLine(); 
                } 
        } 
        break; 

      } 

    } 
     br.close(); 
     bw.close(); 

    } 
} 
+0

답을 완성하려면 질문을 편집하고 덧글의 내용을 추가해야합니다 –

+0

편집 요약에 추가해야합니까? – Dora

+0

예. 답변을 수정하고 콘텐츠를 추가하십시오. 가장 좋은 답변은 묻는 사람의 논리 또는 실수를 설명합니다. 이런 식으로 비슷한 문제를 가진 사람은 답안과 설명에서 사건에 대한 더 많은 지식을 얻을 수 있습니다. –