Jump to content


 


Register a free account to unlock additional features at BleepingComputer.com
Welcome to BleepingComputer, a free community where people like yourself come together to discuss and learn how to use their computers. Using the site is easy and fun. As a guest, you can browse and view the various discussions in the forums, but can not create a new topic or reply to an existing one unless you are logged in. Other benefits of registering an account are subscribing to topics and forums, creating a blog, and having no ads shown anywhere on the site.


Click here to Register a free account now! or read our Welcome Guide to learn how to use this site.

Photo

I need a little help (Java)


  • Please log in to reply
6 replies to this topic

#1 MadDawg

MadDawg

  • Members
  • 453 posts
  • OFFLINE
  •  
  • Gender:Male
  • Location:Houston, TX
  • Local time:05:39 PM

Posted 23 May 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:

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).

//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:

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.
A penguin broke my windows with a half-eaten apple!

BC AdBot (Login to Remove)

 


#2 groovicus

groovicus

  • Security Colleague
  • 9,963 posts
  • OFFLINE
  •  
  • Gender:Male
  • Location:Centerville, SD
  • Local time:04:39 PM

Posted 24 May 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?

#3 MadDawg

MadDawg
  • Topic Starter

  • Members
  • 453 posts
  • OFFLINE
  •  
  • Gender:Male
  • Location:Houston, TX
  • Local time:05:39 PM

Posted 24 May 2009 - 10:34 AM

I want it to read a char (Y/y or N/n).
A penguin broke my windows with a half-eaten apple!

#4 groovicus

groovicus

  • Security Colleague
  • 9,963 posts
  • OFFLINE
  •  
  • Gender:Male
  • Location:Centerville, SD
  • Local time:04:39 PM

Posted 24 May 2009 - 12:39 PM

This code works fine:
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.

#5 MadDawg

MadDawg
  • Topic Starter

  • Members
  • 453 posts
  • OFFLINE
  •  
  • Gender:Male
  • Location:Houston, TX
  • Local time:05:39 PM

Posted 24 May 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.
A penguin broke my windows with a half-eaten apple!

#6 MadDawg

MadDawg
  • Topic Starter

  • Members
  • 453 posts
  • OFFLINE
  •  
  • Gender:Male
  • Location:Houston, TX
  • Local time:05:39 PM

Posted 25 May 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)
A penguin broke my windows with a half-eaten apple!

#7 jpshortstuff

jpshortstuff

    WhatTheTech Teacher


  • Members
  • 660 posts
  • OFFLINE
  •  
  • Gender:Male
  • Location:UK
  • Local time:11:39 PM

Posted 26 May 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).
Trained at the What The Tech Classroom where you too could learn to help others.

My help is free, however, if you wish to make a small donation to show appreciation and to help me continue the fight against Malware, then click here Posted Image

Posted Image




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users