2016-12-10 3 views
2

У меня возникли проблемы с определенной частью моей программы в конце этого (моего первого) семестра. Поэтому я должен взять текстовый файл, который включает имена и некоторые номера, и выполнить некоторые вычисления с номерами для каждого человека. Я попытался создать 2-мерный массив с циклами и преобразовать числа (которые сохраняются как строки) в двойные. Проблема состоит в том, что я не могу использовать значения для j = 3 и j = 4 для расчетов, так как это другая половина задания.Создание двухмерного массива из текстового файла

Так что мне нужно сохранить значения j = 0 и 1 как строки, а значения j = 2, 3 и 4 как можно удвоить - возможно, в том же массиве, если это возможно.

Мой профессор (который не учит, что им следует помнить) сказал что-то об использовании нескольких методов. Если вы посмотрите на следующие строки:

double empPay = empHoursResult * empRateResult; 

System.out.println(arr[3] * arr[4]); 

Ни одна из этих работ, потому что либо необходимо инициализировать двойников (которые делают их = 0) и значения для arr[j] хранятся в виде строк.

Как хранить значения j > 1 только в двух экземплярах, а j = 0, 1 как строки? Любые советы приветствуются. Благодарю.

public static void main(String[] args) { 

    String[] textLine = new String[10]; 
    int i = 0; 
    String empNumber; 
    String empHours; 
    String empRate; 
    double empNumberResult; 
    double empHoursResult; 
    double empRateResult; 

    System.out.println("Reading File ......"); 

    String fileName = "datatext.txt"; 

    try { 

     //Create object of FileReader 
     FileReader inputFile = new FileReader(fileName); 

     //Instantiate the BufferedReader Class 
     BufferedReader bufferReader = new BufferedReader(inputFile); 

     String line; 

     while ((line = bufferReader.readLine()) != null) { 
      textLine[i] = line; 
      i++; 
     } 

     for (int x = 0; x < i; x++) { //For loop of the rows, each employee. 

      String empInfo = textLine[x]; 

      String[] arr = empInfo.split(" "); 
      System.out.println("\nEmployee: " + (x + 1)); 

      for (int j = 0; j < arr.length; j++) { 

       if (j == 0) { 
        System.out.println("Last Name: " + arr[j]); 

       } else if (j == 1) { 
        System.out.println("First Name: " + arr[j]); 
       } else if (j == 2) { 
        empNumber = arr[j]; 
        empNumberResult = Double.parseDouble(empNumber); 
        System.out.println("Employee Number: " + empNumberResult); 
       } else if (j == 3) { 
        empHours = arr[j]; 
        empHoursResult = Double.parseDouble(empHours); 
        System.out.println("Total Hours Worked: " + empHoursResult); 
       } else if (j == 4) { 
        empRate = arr[j]; 
        empRateResult = Double.parseDouble(empRate); 
        System.out.println("Employee Hourly Rate: " + empRateResult); // Read above line ^^. 
       } 
      } 
      double empPay = empHoursResult * empRateResult; 
      System.out.println(arr[3] * arr[4]); 
      /* 
      * Here is where I want the system to print out calculations from below. 
      * The calculatePay method must be somewhere in the first 'for loop' because I need it 
      * to calculate pay for all employess, x. 
      */ 
     } 

     bufferReader.close(); 
    } catch (Exception e) { 
     System.out.println("Error while reading file line by line:" + e.getMessage()); 
    } 
} 

public static void calculatePay(double empHoursResult, double empRateResult) { 

    double empNormalPay; 
    double empOvertimePay; 
    double empOvertimeHours; 
    double empTotalPay; 

    if (empHoursResult > 40) { 
     empNormalPay = 40 * empRateResult; 
     empOvertimeHours = 40 - empHoursResult; 
     empOvertimePay = empOvertimeHours * 1.5; 
     empTotalPay = empNormalPay = empOvertimePay; 
    } 
} 
+1

Вы уверены, что хотите сохранить строки и парные разряды в одном массиве? Возможно, вы должны создать объект для каждого сотрудника и сохранить эти объекты в массиве. Btw. ваш внутренний цикл не нужен. Просто выполните 'empNumber = arr [2];' и т. Д. – SpiderPig

ответ

1

Ваш код кажется довольно избыточным со всеми для петель Я включил немного псевдо-кода ниже, из которого вы должны иметь возможность повторно работать с программой, так как я не должен решать вашу задачу.

while(line = readline){ 
    String[] data = line.split(" "); 

    String a = data[0]; 
    String b = data[1]; 
    double c = Double.parseDouble(data[2]); 
    double d = Double.parseDoubledata([3]); 
    double e = Double.parseDoubledata([4]); 
} 

Является ли это ясным, или я не вижу, где вы застряли?

EDIT
Проводы Трэвис пост я понимаю, ваша проблема может быть в хранении как в одном массиве. Это действительно невозможно, использование двух массивов должно решительно решить ваши проблемы.

0

За исключением полиморфизма объектов (который здесь не применим), вы не можете хранить два разных типа данных в одном массиве. По определению массив содержит только один тип данных. Таким образом, вам нужно создать два разных массива (один для ваших строк и один для ваших парных) или создать один класс «EmployeeInfo», который содержит поля для ваших строк и удвоений, - и затем создать один массив из этого класса.

+0

Вы можете хранить значения 'String' и' Double' в массиве 'Object', но я сомневаюсь, что он должен это сделать. – SpiderPig

+0

Поскольку он сохраняет значения 2-4 в других переменных, я не думаю, что это на самом деле часть проблемы. – turoni

0

Предполагая использование массивов примитивов, не является явным требованием для вашего задания, вы должны сделать объект EmployeeWorkRecord вместо этого, который инкапсулирует каждый набор элементов в запись (фамилия, имя, идентификатор сотрудника, часы, скорость) и используйте коллекцию (например, ArrayList) для их хранения. Затем вы можете добавить метод calculatePay() в свой EmployeeWorkRecord.

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

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