BleepingComputer.com: I need a little help (Java)

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

I need a little help (Java)

#1 User is offline   MadDawg 

  • Senior Member
  • PipPipPipPip
  • Find Topics
  • Group: Members
  • Posts: 453
  • Joined: 09-July 07
  • Gender:Male
  • Location:Houston, TX

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:

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

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

#2 User is offline   groovicus 

  • Hail Groovicus!
  • PipPipPipPipPipPip
  • Find Topics
  • Group: Moderator
  • Posts: 9,605
  • Joined: 05-June 04
  • Gender:Male
  • Location:Centerville, SD

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?
"Take the risk of thinking for yourself, much more happiness, truth, beauty, and wisdom will come to you that way" - Christopher Hitchens

#3 User is offline   MadDawg 

  • Senior Member
  • PipPipPipPip
  • Find Topics
  • Group: Members
  • Posts: 453
  • Joined: 09-July 07
  • Gender:Male
  • Location:Houston, TX

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 User is offline   groovicus 

  • Hail Groovicus!
  • PipPipPipPipPipPip
  • Find Topics
  • Group: Moderator
  • Posts: 9,605
  • Joined: 05-June 04
  • Gender:Male
  • Location:Centerville, SD

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.
"Take the risk of thinking for yourself, much more happiness, truth, beauty, and wisdom will come to you that way" - Christopher Hitchens

#5 User is offline   MadDawg 

  • Senior Member
  • PipPipPipPip
  • Find Topics
  • Group: Members
  • Posts: 453
  • Joined: 09-July 07
  • Gender:Male
  • Location:Houston, TX

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 User is offline   MadDawg 

  • Senior Member
  • PipPipPipPip
  • Find Topics
  • Group: Members
  • Posts: 453
  • Joined: 09-July 07
  • Gender:Male
  • Location:Houston, TX

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 User is offline   jpshortstuff 

  • WhatTheTech Teacher
  • PipPipPipPipPip
  • Find Topics
  • Group: Malware Response Team
  • Posts: 660
  • Joined: 15-June 07
  • Gender:Male
  • Location:UK

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

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users