Методы не печатаются должным образом

#java

#java

Вопрос:

Похоже, что мои методы не печатают printstream должным образом. Кажется, что печатается что-то только та часть, которая говорит isOutComeNew() . Однако даже этот, похоже, печатает последнее введенное число. randOm() Метод также, похоже, единственный, который работает должным образом.

Я не знаю, почему это происходит.

 public class Assignment3 {
    public static int number1, number2, result, newResult, newNumber1, newNumber2;
    public static int winner1 = 5, winner2 = 7, winner3 = 12;

    public static int loser1 = 2, loser2 = 4, loser3 = 11;
    public static Scanner input = new Scanner(System.in);

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

        PrintStream ps = new PrintStream("Assignment3.txt");

        promptUser();
        number1 = input.nextInt();
        System.out.println("Please enter another integer between 1-6 ");
        number2 = input.nextInt();

        do {
            ps.println("You rolled a"  number1    "and a "  number2);
            isValid();

            result = outCome(number1, number2);
            ps.printf("The outcome is %d n", result);
            isOutcome();

            newNumber1 = number1   2;
            newNumber2 = number2   3;

            newNumbers();
            result = outCome(newNumber1, newNumber2);
            ps.printf("The outcome is %d n", result);
            isOutcomeNew();

            promptUser();
            number1 = input.nextInt();
            System.out.println("Please enter another integer between 1-6 ");
            number2 = input.nextInt();

        }while ((number1 != 99) amp;amp; (number2 != 95));

        randOm();
    }

    public static void promptUser() {

        System.out.println("In order to stop please enter 99 and 95 to end the game. ");
        System.out.println("Please enter an integer between 1-6. ");

    }

    public static int outCome(int x, int y) {
        int sum;
        sum = x   y;
        return (sum);
    }

    public static void isValid()throws Exception {
        PrintStream ps= new PrintStream("Assignment3.txt");
        while ((number1 < 1 || number1 > 6) || (number2 < 1 || number2 > 6)) {

            System.out.println("This set of dice rolls is invalid. Please enter another set. n");

           System.out.println("Please reenter a number between 1 and 6. ");
            number1 = input.nextInt();
            System.out.println("Please reenter a number between 1 and 6. ");
            number2 = input.nextInt();
            System.out.printf("You rolled a %d and a %dn", number1, number2);
                    }

    }
    // method for determining winner, loser ,or draw

    public static void isOutcome() throws Exception {
        PrintStream ps = new PrintStream("Assignment3.txt");
        // integer value for winner is 1, int value for loser is -1 and int value for draw is 0
        int winner = 1;
        int loser = -1;
        int draw = 0;

        int oldCount = 0, oldLose = 0, oldDraw = 0;
        if ((result == winner1) || (result == winner2) || (result == winner3)) {
            System.out.println(winner);
            oldCount  ;

        } else if ((result == loser1) || (result == loser2) || (result == loser3)) {
            System.out.println(loser);
            oldLose  ;

        } else {
            System.out.println(draw);
            oldDraw  ;

        }
        System.out.printf("The amount of wins are %d n", oldCount);
        System.out.printf("The amount of losses are %d n", oldLose);
        System.out.printf("The amount of draws are %d n", oldDraw);

    }

    public static void isOutcomeNew() throws Exception {
        int winner = 1;
        int loser = -1;
        int draw = 0;
        int newCount = 0, newLose = 0, newDraw = 0;
        PrintStream ps = new PrintStream("Assignment3.txt");
        if ((result == winner1) || (result == winner2) || (result == winner3)) {
            System.out.println(winner);
            newCount  ;

        } else if ((result == loser1) || (result == loser2) || (result == loser3)) {
            System.out.println(loser);
            newLose  ;

        } else {
            System.out.println(draw);
            newDraw  ;

        }
        System.out.printf("The amount of computer wins are %d n", newCount);
        System.out.printf("The amount of computer losses are %d n", newLose);
        System.out.printf("The amount of computer draws are %d n", newDraw);

    }
// 

    public static void newNumbers() throws Exception {
        PrintStream ps = new PrintStream("Assignment3.txt");

        while (newNumber1 > 6 || (newNumber2 > 6)) {
            if (newNumber1 > 6) {
                newNumber1 = (newNumber1 - 6);
                System.out.printf("The computer rolled %d n", newNumber1);
            }
            if (newNumber2 > 6) {
                newNumber2 = (newNumber2 - 6);
                System.out.printf("The computer rolled %d n", newNumber2);
            }
        } 
            System.out.printf("The computer rolled %d and a %dn", newNumber1, newNumber2);

        }
  

Комментарии:

1. Плохое название. Следует кратко изложить вашу конкретную техническую проблему.

Ответ №1:

Похоже, что что-то печатает только та часть, которая говорит, что isOutComeNew().

У вас есть несколько методов, которые делают это:

     PrintStream ps = new PrintStream("Assignment3.txt");
  

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

Решения:

  • Откройте PrintStream только один раз и передайте ps методам в качестве параметра метода или через переменную экземпляра или класса.

  • При создании экземпляра PrintStream откройте его в режиме «добавить». Вы не можете сделать это напрямую, но вы можете сделать это, создав FileOutputStream в режиме добавления, а затем передав это в PrintStream конструктор.