2015-04-06 3 views
2

Я пытаюсь хранить несколько пользовательских входов в виде файла на основе байт, а затем беру номера файлов и использовать их для расчета в написанной мной программе. Я начал с преобразования строки в double, но я столкнулся с проблемой чтения значений и подкачки в методах calc. Я понял, что я предполагаю использовать fileOutputStream, но понятия не имею, как включить в код. Любые рекомендации будут оценены. См. Код для справки:Взять пользовательский ввод и сохранить в массив в файле

import java.util.Scanner; 
import java.io.*; 

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

     double cash = 0; 
     int years = 0; 
     double pv = 0; 
     String line = null; 

     String filename = "bank.txt"; 

     Scanner in = new Scanner(System.in); 

     System.out.println("How much money would you like to have?"); 
     cash = in.nextDouble(); 

     System.out.println("How many years is your investment?"); 
     years = in.nextInt(); 

     Bank1 bank1 = new Bank1(cash, years); 

     BufferedWriter bw = new BufferedWriter(new FileWriter(filename));  
     bw.write(String.valueOf(cash)); 
     bw.close(); 

     BufferedReader br = new BufferedReader(new FileReader(filename));  
     while((line = br.readLine()) != null) 
     { 
      //System.out.println(line); 
     } 

     System.out.println("The present value to invest over the years to reach goal: $"+bank1.presentValue()); 
     System.out.println("The furture value in the account will be: $"+bank1.futureValue()); 
    } 
} 

Вот второй класс, который выполняет все вычисления.

public class Bank1 { 

    private double cash; 
    private double rate = .0425; 
    private int years; 

    public Bank1(double cash, int years){ 
     this.cash = cash; 
     this.years = years;  
    }n 

    public double presentValue(){ 
     double pv = cash/Math.pow((1+rate), years); 
     double present = Math.round(pv *100); 
     present = present/100; 
     return present; 
    } 


    public double futureValue(){ 
     double fv = this.presentValue()*Math.pow((1+rate), years); 
     double future = Math.round(fv *100); 
     future = future/100; 
     return future; 
    } 

} 
+1

Пожалуйста, используйте [BigDecimals] (http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html) вместо 'double' для вычислений, чтобы избежать неизбежных ошибок округления , –

ответ

1

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

http://docs.oracle.com/javase/7/docs/api/java/io/package-summary.html

(Это документация для пакета java.io в вашем коде вы говорите import java.io.*, что дает вам доступ ко всему указанному в документации)

Когда вы говорите: «Я понял, что я я полагаю, что использовать fileOutputStream, но не знаю, как включить в код ». вы НЕ ИМЕЕТЕ, если это требование не требует этого, я бы использовал FileWriter или ObjectOutputStream. ObjectOutputStream идеально подходит для того, что вы пытаетесь сделать.

+1

Вы можете использовать 'ObjectOutputStream.writeLong()' для записи ваших данных и 'ObjecInputStream.readLong()' для его чтения. –

+0

Спасибо, задание попросило меня преобразовать существующий код в байт. Я читал, что FileOutputStream делает это, и я смотрю OjectOutputStream. Должен ли я по-прежнему писать ObjectOutputStream в качестве массива для вызова разных значений? –

+1

В java есть потоки символов и потоки байтов. Потоки символов записываются только в ASCII-символах (т. Е. Вместо того, чтобы записывать число пятьдесят в двоичном формате, оно записывает «5» и «0»). Байтовые потоки записываются в байтах (8 бит), в случае, когда он записывает букву, которую он записывает в ASCII, '' становится 32 в двоичном формате, а число 50 становится 50 в двоичном формате. –

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