Значения стека не читаются в файл - PullRequest
0 голосов
/ 09 июня 2019

В настоящее время я работаю над следующим методом:

public void addExpenditure(Stack<Double> costStack){

    try(BufferedWriter bw = new BufferedWriter(new FileWriter(f.getPath(), true))) {

        while (costStack.size() != 0)
            bw.write(costStack.pop().toString() + " ,");

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

}

Метод состоит в том, чтобы просто взять значения, хранящиеся в стеке costStack, и записать их в файл.Однако по неизвестной причине этого не происходит.

Вместо этого каждый раз в файл ничего не записывается.Это странно, потому что этот метод работает точно так же, как и должен, и он почти идентичен:

public void addExpenditure(double amount){

    Double amount1 = amount;

    try(BufferedWriter bf = new BufferedWriter(new FileWriter(f.getPath(), true))){
        bf.write(amount1.toString() + " , ");
    }catch(IOException e){
        e.printStackTrace();
    }

}

Также не выдается никаких исключений.

Вот все методычто я сейчас использую, чтобы сделать эту «работу»:

import java.util.Scanner;
import java.util.Stack;

public class BudgetMain {

/*
Pre-Tax income per month: $5875
After-Tax income per month: $4112
Savings Goal per month (61% of After-Tax income): $2508.62
Expendable income per month (After-Tax income - Savings Goal Per month): $1604
 */

public static void main(String[] args){

    try {
        Budget b = new Budget();
        b.clearFile();
        System.out.println("Available funds left to spend this month: " + b.availableFundsLeft());
        Stack<Double> costStack = new Stack<>();
        costStack = takeValues(costStack);
        b.addExpenditure(costStack);
        System.out.println("Available funds left to spend this month: " + b.availableFundsLeft());
    }catch(Exception e){e.printStackTrace();}

    }


public static Stack<Double> takeValues(Stack<Double> costStack){

    System.out.println("Enter appropriate expenditures");
    Scanner stdin = new Scanner(System.in);

    while(true) {
        costStack.push(stdin.nextDouble());
        if (costStack.peek() == -1){
            costStack.pop();
            return costStack;
        }
    }


}

}

Другой файл класса:

public void addExpenditure(Stack<Double> costStack){

    try(BufferedWriter bw = new BufferedWriter(new FileWriter(f.getPath(), true))) {

        while (costStack.size() != 0)
            bw.write(costStack.pop().toString() + " ,");

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

}

public double availableFundsLeft(){
    try{return afterTaxIncome - savingsGoalPerMonth - 
getTotalExpenditureThisMonth();}
    catch(Exception e){e.printStackTrace();}
    return -1;
}

1 Ответ

1 голос
/ 09 июня 2019

Этот код работает, он создает файл test.out с содержимым 2.0, 1.0,

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
import java.util.Stack;

public class BudgetMain {


    public static void main(String[] args){
        Stack<Double> stack = new Stack<>();
        stack.push(1.0);
        stack.push(2.0);
        addExpenditure1(stack, new File("test.out"));
    }


    public static void addExpenditure1(Stack<Double> costStack, File f){

        try(BufferedWriter bw = new BufferedWriter(new FileWriter(f.getPath(), true))) {

            while (costStack.size() != 0)
                bw.write(costStack.pop().toString() + " ,");

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

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...