-3

I am newbie in java programming and learning Io. I am making a simple RPG game but got a problem in my code. it's about the file it's blank whenever i finish running it. somehow whenever I run it I got an empty file. can some one help me :c. (sorry for bad English)

here is my code: FOR RANDOM CLASS

public class Dice {
/** instance variables */
private final  Random r;

/**
 * Initializes the random number generator r
 */


public Dice() {
    r = new Random();
}

/**
 * Returns a random integer between 1 and 6 using Random r
 * @return 
 */
public int roll() {
    int dieRoll = r.nextInt(6 - 1);
    return dieRoll;
}

}

FOR Character CLASS

public class Character {

static Dice dice = new Dice();
private  String name;
private  int strength;
private  int dexterity;
private  int intelligence;
private  int maxLife;
private int currentLife;
private int atk;

public Character(){

}
public Character(String n, int s, int d, int i) {

    this.name = n;
    this.strength = s;
    this.dexterity = d;
    this.intelligence = i;
    this.maxLife = 100 + dice.roll();
    this.currentLife = maxLife;

}


/**
 * Returns a random die roll using the roll method in the Dice.java,
 * *modified by the character's strength
 */
public int attack() {
    this.atk = strength * dice.roll() + 24;
    return atk;
}

public void wound(int damage) {
    if ((currentLife - damage) <= 0) {
        this.currentLife = 0;
    } else {
        this.currentLife = currentLife - damage;
    }
}

public void heal(int heal) {
    if ((currentLife + heal) < maxLife) {
        this.currentLife = currentLife + heal;
    } else {
        this.currentLife = maxLife;
    }
}

public boolean checkDead() {
    return currentLife == 0;
}

public String getName() {
    return name;
}

public int getStrength() {
    return strength;
}

/**
 * Returns dexterity
 */
public int getDexterity() {
    return dexterity;
}

/**
 * * Returns intelligence
 */
public int getIntelligence() {
    return intelligence;
}

/**
 * Returns currentLife
 */
public int getCurrentLife() {
    return currentLife;
}

/**
 * Returns maxLife
 */
public int getMaxLife() {
    return maxLife;
}

public int getAtk() {
    return atk;
}

}

FOR MAIN CLASS(HERE IS WERE THE PROBLEM I DONT KNOW IF I LACK SOMETHING HERE)

     public class TestCharacter {
     public static void main(String letsPlay[]){
    PrintWriter outputStream = null;
    try{
         outputStream = new PrintWriter(new FileOutputStream("RPGOutput.txt",true));

        Scanner s = new Scanner(System.in);
    System.out.print("Enter Player 1 Character name:");
    Character p1 = new Character(s.next(),s.nextInt(),s.nextInt(),s.nextInt());
    System.out.println(p1.getName()+ "\tHAS ENTERED THE BATTLE!");
    System.out.println("Enter Player 2 Character name:");
    Character p2 = new Character(s.next(),s.nextInt(),s.nextInt(),s.nextInt());
    System.out.println(p2.getName()+ "\tHAS ENTERED THE BATTLE!");      

    int i = 1;
    do {
        outputStream.println("\nR O U N D " + i + "!");
        outputStream.print(p1.getName() + " "+"HP is");
        outputStream.println("\t" + p1.getCurrentLife() + "/" + p1.getMaxLife());
        outputStream.println("while");
        outputStream.print(p2.getName() + " " + " HP is");
        outputStream.println("\t" + p2.getCurrentLife() + "/" + p2.getMaxLife());
        outputStream.println(" ");
        p2.wound(p1.attack());
        outputStream.println(p1.getName() + " attacks " + p2.getName() + " for " + p1.getAtk() + " damage!");
        if (p2.checkDead() == true) {
            outputStream.println(p2.getName() + " lose " + p1.getName() + " has won!");
            return;
        }
        p1.wound(p2.attack());
        outputStream.println(p2.getName() + " attacks " + p1.getName() + " for " + p2.getAtk() + " damage!");
        if (p1.checkDead() == true) {
            outputStream.println(p1.getName() + " lose " + p2.getName() + " has won!");
            return;
        }
        i++;

    } while (p1.checkDead() == false || p2.checkDead() == false);
    }catch(FileNotFoundException e){
        System.out.println("Error no file" + e);
        System.exit(0);
    }
}

}

1 Answers1

0

When you open a stream you should always finally close it.

In java 1.7 and above you just try( ... open the stream here ){ ... useit ...}, the compilers adds the finally close implicitly .

You need to finally close to be sure you don't leave open resources allocated.

It could be wise to set the PrintWriter to autoflush or make sure you flush before closing the stream, if not so maybe the PrintWriter does not write to the output stream until is buffer is full.

Java 1.6 and below

    OutputStream fos = null;
    try{
        fos = new FileOutputStream("RPGOutput.txt",true);
        PrintWriter out = new PrintWriter(fos, true);

        out.println("Someting");
        out.println("...");

        // 
        out.flush();
    }catch(IOException e){
        // Manage exception
    } finally {
        try{
            if(fos!=null){
                fos.close();
            }
        }catch(IOException e){
            // Swallow exception
        }
    }

Java 1.7 and above

    try(OutputStream fos = new FileOutputStream("RPGOutput2.txt",true);
            PrintWriter out = new PrintWriter(fos,true);) {

        out.println("Hello");
        out.print("Hello 2");

    }  catch (IOException e) {
        // Manage exception
    }
minus
  • 2,646
  • 15
  • 18