2016-03-05 5 views
-1

Я работаю над программой, которая работает с внешним файлом. Программа должна: Написать программу для чтения результатов опроса в трех массивы, эхо печати данных и выполнение и выводить следующие анализы:Доход на дом Доход - java

  1. Подсчитайте число семей, включенным в исследовании и печать три - таблица столбец, отображающая данные, считанные (предполагается не более 25 домашних хозяйств)

  2. Рассчитайте средний доход домохозяйства и укажите идентификационный номер и доход каждого домохозяйства, превышающий средний.

  3. Определить процент домохозяйств, имеющих доходы ниже уровня бедности. Доход уровня бедности может быть рассчитан по формуле: p = $ 3750,00 + $ 750,00 * (м-2), где m - количество членов каждого домохозяйства.

Это то, что я до сих пор, но это, кажется, не так, как она работает (я должен иметь к классам):

import java.io.*; 
import java.util.Scanner; 
public class main 
{ 
    public static void main(String[] args) throws Exception 
    { 
     Scanner sf = new Scanner(new FileInputStream("survey2.dat")); 

     String[] filePaths = { "D:/survey2.dat" }; 
     SurveyCollection surveys = new SurveyCollection(); 
     Runner runner = new Runner(); 
     runner.load(filePaths, surveys); 
     runner.printHouseholdIncomeExceedingAverage(surveys); 
     runner.printouseholdBelowPoverty(surveys); 
     //print(surveys); 

     System.exit(0); 
    } 
} 

import java.io.*; 
import java.util.Scanner; 
public class Runner 
{ 
    public static void load(String[] filePaths, SurveyCollection surveys)throws Exception { 
    for (int i = 0; i < filePaths.length; i++) { 
     Scanner fileIn = null; 
     try { 
     fileIn = new Scanner(new FileReader(filePaths[i])); 
     while (fileIn.hasNextLine()) { 
      String line = fileIn.nextLine(); 
      surveys.setSurvey(line); 
     } 
     } catch (Exception ex) { 
     ex.printStackTrace(); 
     } /*finally { 
     fileIn.close(); 
     }*/ 
    } 
    } 

    public static void printHouseholdIncomeExceedingAverage(
     SurveyCollection surveys) { 
    int size = surveys.getNumberOfHousehold(); 
    double average = surveys.getAverageIncome(); 
    String message = "Households with income exceeding an average income of %,.2f%n"; 
    System.out.printf(message, average); 
    System.out.println("Id Income Member"); 
    for (int i = 0; i < size; i++) { 
     if (surveys.getIncomeByIdx(i) > average) { 
     System.out.println(surveys.formattedString(i)); 
     } 
    } 
    } 

    /** 
    * design for debug 
    * @param surveys 
    */ 
    private static void print(SurveyCollection surveys) { 
    int size = surveys.getNumberOfHousehold(); 
    System.out.println(); 
    for (int i = 0; i < size; i++) { 
     System.out.println(surveys.formattedString(i)); 
    } 
    } 

    public static void printouseholdBelowPoverty(SurveyCollection surveys) { 
    int size = surveys.getNumberOfHousehold(); 
    int count = 0; 
    System.out.println(); 
    for (int i = 0; i < size; i++) { 
     if (surveys.isInPoverty(i)) { 
     System.out.println(surveys.formattedString(i)); 
     count++; 
     } 
    } 
    String message = "Percent of households below poverty level = %f%n"; 
    System.out.printf(message, ((double) count/(double) size)); 
    } 
} 

class SurveyCollection { 
    final int MAX = 30; 
    private int idx = 0; 
    private int sumOfIncome = 0; 
    private String[] surveyIds = new String[MAX]; 
    private int[] incomes = new int[MAX]; 
    private int[] members = new int[MAX]; 

    public void setSurvey(String value) { 
    if (idx < MAX) { 
     String[] fields = value.split(" "); 
     surveyIds[idx] = fields[0]; 
     incomes[idx] = Integer.parseInt(fields[1]); 
     members[idx] = Integer.parseInt(fields[2]); 
     sumOfIncome += incomes[idx]; 
     idx++; 
    } 
    } 

    public int getNumberOfHousehold() { 
    return this.idx; 
    } 

    public double getAverageIncome() { 
    return (double) sumOfIncome/getNumberOfHousehold(); 
    } 

    public int getIncomeByIdx(int idx) { 
    return incomes[idx]; 
    } 

    public String formattedString(int idx) { 
    String style = "%s %d %d"; 
    return String.format(style, this.surveyIds[idx], this.incomes[idx], this.members[idx]); 
    } 

    public boolean isInPoverty(int idx) { 
    boolean result = false; 
    int threadhold = (3750 + 750 * members[idx]); 
    result = incomes[idx] <= threadhold; 
    return result; 
    } 

} 

Что я делаю неправильно ?

Внешний Файл:

1041 12180 4 
1062 13240 3 
1327 19800 2 
1483 22458 8 
1900 17000 2 
2112 18125 7 
2345 15623 2 
3200 6 
3600 6500 5 
3601 11970 2 
4725 8900 3 
6217 10000 2 
9280 6200 1 

Вывод должен быть похож на это:

id  income members 
1041  12180  4 
1062  13240  3 
1327  19800  2 
1483  22458  8 
1900  17000  2 
2112  18125  7 
2345  15623  2 
    3200  6 
3600  6500  5 
3601  11970  2 
4725  8900  3 
6217  10000  2 
9280  6200  1 


Households with income exceeding an average income of 12707.4 

id  income members 
1062  13240  3 
1327  19800  2 
1483  22458  8 
1900  17000  2 
2112  18125  7 
2345  15623  2 

Percent of households below poverty level = 0.0769231 
+1

Вы должны быть более конкретными в своей проблеме. Чего вы ожидаете? Что происходит вместо этого? –

+0

Спасибо, я пытался это сделать, но я не мог заставить его это сделать. –

+0

Я ожидаю, что он распечатает идентификатор, доход и общие члены во внешнем файле, затем найдет средний доход домашних хозяйств. Затем распечатайте дом, который превышает средний доход, а также средний размер домашних хозяйств, находящихся за чертой бедности. Однако ничего не происходит. –

ответ

0

Так я получаю некоторый вывод, когда я прохожу весь путь к файлу метода runner.load.

String fileName = "survey2.dat"; 
    String filePaths[] = {"C:\\Users\\Neal\\Desktop\\" + fileName}; 


     Households with income exceeding an average income of 12,707.38 
Id Income Member 
1062 13240 3 
1327 19800 2 
1483 22458 8 
1900 17000 2 
2112 18125 7 
2345 15623 2 

3200 6 
3600 6500 5 
Percent of households below poverty level = 0.153846 
+0

Так что же вы точно изменили? По крайней мере, дайте объяснение, а не просто вставьте кучу кода. –

+0

В выводах ничего нет. –

+0

операции ввода файлов. Посмотрите на него прямо сейчас, и, похоже, проблема с операциями сканера. Одним из возможных решений было бы использование другого читателя, такого как BufferedReader. – neal

Смежные вопросы