-1

I am working on some code for homework and for the life of me can't figure out why this won't run. It ran until I added in the methods for file reading, which I know worked in another program. I took the code directly from some of my other work. So, can someone much better at Java than I tell me what I am doing wrong to have this problem? As this is homework please don't tell me how to fix any other problems, but I wouldn't discourage hints about them.

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

public class vowels_r_us {

//for file reading
private static FileInputStream inFile;
private static InputStreamReader inReader;
private static BufferedReader reader;

//pasrsing input from file
private static StringTokenizer strTkn;

public static void main(String[] args) 
{

    initFile(); //prepare file for reading

    while (reader.ready())//iterate as long as there is more avaliable data
    {
        String word, suffix, line;
        line = getWordSuffix();
        word = line.substring(0, line.indexOf(' '));
        suffix = line.substring(line.indexOf(' '));


    }
}

/*CONJUGATION METHODS*/
static String pluralize(String s)
{
    String pluralForm;
    switch (classifyEnding(s))
    {
        case 'c':
            pluralForm = s.concat("GH");
            break;
        case 'v':
            pluralForm = s.substring(0, s.length() - 1).concat("G");//drop last letter add G
            break;
        case 'd':
            pluralForm = s + s.charAt(s.length() - 1) +"H";//double last letter, then add H
            break;
        default:
            pluralForm = "If you are getting this something is broken, have fun debugging.";
            break;
    }
    return pluralForm;
}

static String addSuffix(String word, String suffix)
{
    String suffixAdded;
    switch (classifyEnding(word))
    {
        case 'c':
            suffixAdded = word + suffix;
            break;
        case 'v':
            if(isVowel(suffix.charAt(0)))
            {
                suffixAdded = word + suffix.substring(1);//word + drop first letter of suffix then add suffix
            }
            else
            {
                suffixAdded = word + suffix.charAt(0) + suffix;//word + first letter of suffix + suffix
            }
            break;
        case 'd':
            if(isVowel(suffix.charAt(0)))
            {
                suffixAdded = word + suffix.charAt(0) + suffix;//word + first letter of suffix + suffix
            }
            else
            {
                suffixAdded = trimRepeatSequence(word) + suffix;
            }
            break;
        default:
            suffixAdded = "If you are getting this something is broken, have fun debugging.";
            break;
    }
    return suffixAdded;
}
/*END CONJUGATION METHODS*/

/*STRING MODIFICATION AND TESTING METHODS*/
//removes lefmost vowel or consonant from sequence
static String trimRepeatSequence(String s)
{
    String editedString = "";
    boolean vBasedEnding = isVowel(s.charAt(s.length() - 1));

    for (int i = s.length() - 1; i >= 0; i--)
    {
        if (isVowel(s.charAt(i)) != vBasedEnding)
        {
            editedString = s.substring(0, i+1) + s.substring(i+2, s.length());
            break;
        }
    }

    return editedString;
}

/* classify endings in to three grammatical categories, single vowel ending 'v', single consonant ending 'c', double type ending 'd'
 */
static char classifyEnding(String s)
{
    char grammaticalClass;
    if (isVowel(s.charAt(s.length()- 1)) == isVowel(s.charAt(s.length()- 2)))
    {
        grammaticalClass = 'd';
    }
    else
    {
        grammaticalClass = isVowel(s.charAt(s.length()- 1)) == true? 'v' : 'c';
    }
    return grammaticalClass;
}

static boolean isVowel(char c)
{
    boolean b;//rename
    switch (Character.toLowerCase(c))
    {
        case 'a': case 'c':
        case 's': case 'l':
            b = true;
            break;

        default:
            b = false;
            break;
    }
    return b;
}
/*END STRING MODIFICATION AND TESTING METHODS*/

/*FILE READER METHODS*/
//read file for input
public static void initFile() throws IOException
{
    inFile = new FileInputStream ("C:\\Users\\Tom\\Dropbox\\!!VHSAPCSData\\VHSP35data.txt");
    inReader = new InputStreamReader(inFile);
    reader = new BufferedReader(inReader);
}

public static String getWordSuffix() throws IOException
{
    String line;

    line = reader.readLine();

    return line;
}
}
Modus Tollens
  • 5,083
  • 3
  • 38
  • 46
Tom
  • 141
  • 1
  • 10

1 Answers1

2

You need to wrap your IO code in a try / catch:

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

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

        Scanner s = null;

        try {
            s = new Scanner(new BufferedReader(new FileReader("xanadu.txt")));

            while (s.hasNext()) {
                System.out.println(s.next());
            }
        } finally {
            if (s != null) {
                s.close();
            }
        }
    }
}

taken from: http://docs.oracle.com/javase/tutorial/essential/io/scanning.html

sdasdadas
  • 23,917
  • 20
  • 63
  • 148
  • Ok, I actually fixed it but not with he try and catch I probably should fix it with but instead just added throws IOException to my main method. I am just in an AP Comp. Sci. class so we let the whole exception catching slide. – Tom Dec 17 '12 at 21:00
  • They're quite simple concepts and whenever you deal with exceptions you have two choices: deal with them, or continue passing them onwards. If you deal with them the try / catch / finally block lets you "try" some code and if it fails (throws an exception) you "catch" it and deal with it. Otherwise, if you pass them onwards (as you have done) some function higher up will have to deal with them - if no one does, then it's going to crash your program if they surface to the top. I urge you to read about them - they're not very daunting and will put you far ahead of your class without much effort. – sdasdadas Dec 17 '12 at 21:03
  • 1
    Oh, well I definitely understand how they work as I have dealt with them in C# before, just Java trips me up sometimes. There is many elements of this program that realistically could have been improved like I would have made a class for the words if I had the time and such, but I have only about an hour until I have to submit this and I figured I would just throw it together the fastest way I could. – Tom Dec 17 '12 at 21:13
  • I understand more than you'll ever know. :) – sdasdadas Dec 17 '12 at 21:25