Printable Version of Topic

Click here to view this topic in its original format

BleepingComputer.com _ Programming _ I need a little help (Java)

Posted by: MadDawg May 23 2009, 11:17 PM

I'm having a little trouble with my java application. I want it to repeat when the user enters "y" or "Y" and exit when the user enters "n" or "N". The app compiles, but when it's supposed to repeat/exit, I get this output:

QUOTE
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(String.java:687)
at If_Else2.Grade(If_Else2.java:74)
at If_Else2.main(If_Else2.java:9)

Process completed.


Here is the source code (created in JCreator LE).

CODE
//This is my first attempt at an if/else program.

import java.util.Scanner;

public class If_Else2
{
public static void main( String args[])
{
Grade();
}

public static void Grade()
{
System.out.println("*********Grade Calculation*********");
System.out.println();

Scanner input = new Scanner( System.in );

int score;
char grade;
char cont;
boolean done = false;
boolean ans = false;

while (done == false)
{
System.out.print("Enter your test score: ");
score = input.nextInt();

//Main Calculations
if (score >= 90)
{
grade = 'A';
}
else if (score >= 80)
{
grade = 'B';
}
else if (score >= 75)
{
grade = 'C';
}
else if (score >= 70)
{
grade = 'D';
}
else
{
grade = 'F';
}

//Output
System.out.println();
if (score > 9000)
{
System.out.println("YOUR SCORE IS OVER NIIIINE THOUSSSAAAAAANNNDDDDD!!!!!!!!!");
}
else if (score > 100)
{
System.out.println("You either have a good teacher, or you're a suck-up,\nbecause you are not supposed to score that high.");
}
else if (score >= 0)
{
System.out.println("You earned a(n) " +grade +" on your test.");
}
else
{
System.out.println("You must have a bad teacher, because you cannot score that low\nno matter how dumb you are.");
}
while (ans == false)
{
System.out.print("\nDo you want to enter another score? Enter \"y\" for \"yes\" or \"n\" for \"no\": ");
//cont = input.nextChar();
cont = input.nextLine().charAt(0);
//cont = charAt(0);
if (cont == 'y' || cont == 'Y')
{
done = false;
ans = true;
}
else if (cont == 'n' || cont == 'N')
{
done = true;
ans = true;
}
else
{
System.out.println("Please Enter \"y\" for \"yes\" or \"n\" for \"no\".");
}
}

System.out.println();
}
}
}


Here's the section I'm having trouble with:

CODE
while (ans == false)
{
System.out.print("\nDo you want to enter another score? Enter \"y\" for \"yes\" or \"n\" for \"no\": ");
//cont = input.nextChar();
cont = input.nextLine().charAt(0);
//cont = charAt(0);
if (cont == 'y' || cont == 'Y')
{
done = false;
ans = true;
}
else if (cont == 'n' || cont == 'N')
{
done = true;
ans = true;
}
else
{
System.out.println("Please Enter \"y\" for \"yes\" or \"n\" for \"no\".");
}
}


As you can see, I've commented out the "cont" twice as a result of trial and error.

Posted by: groovicus May 24 2009, 10:02 AM

The error is telling you that there is nothing being pointed to by cont. Are tou reading in a line from the keyboard, or are you simply reading a char?

Posted by: MadDawg May 24 2009, 10:34 AM

I want it to read a char (Y/y or N/n).

Posted by: groovicus May 24 2009, 12:39 PM

This code works fine:

CODE
import java.util.Scanner;

public class scanTest {

    public static void main(String[] args) {
        Scanner input = new Scanner( System.in );
        System.out.println(input.nextLine().charAt(0));
    }
}


You need to fire up the debugger and step through your code to try and figure out where the keyboard input is being consumed.

Posted by: MadDawg May 24 2009, 02:08 PM

It won't allow any input. The error comes up as soon as it asks whether you want to continue or not.

Posted by: MadDawg May 25 2009, 01:30 PM

Alright, well thanks for your help groovicus. I'll just program this same app in C++, since it handles letter inputs better. (IMO)

Posted by: jpshortstuff May 26 2009, 03:29 AM

The problem is that after using nextInt(), you are left with input that starts with a newline.

For example, your input will be something like this:
INT\n
CHAR\n


First, you are calling nextInt(), which will leave you with this:
\n
CHAR\n


Now you are calling nextLine(). Since the next character on the input is a newline character, the function returns immediately giving you a string with zero characters in it. You need to flush the rest of that first line away (an extra call to nextLine() should do it).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)