1

I am a novice with Java, and I am experiencing an error in method userInput, line 16, which throws a no such element exception. I need to be able to pass the values of both 'before' and 'after.' Thanks! Here is the code:

import java.util.Scanner;
public class BasketballGame {
    public static String nameFirstTeam = "Bulldogs";
    public static String nameSecondTeam = "Wildcats";
    private static String before, character1, character2, after;

    public static int scoreFirstTeam = 0;
    public static int scoreSecondTeam = 0;
    public int scoreOne, scoreTwo, scoreThree;
    //determine end of game
    //System.out.println("Enter the team that scored ('a' for Bulldogs, 'b' for Wildcats), then enter the number of points scored.");
    public static void userInput(){

        Scanner keyboard = new Scanner(System.in);
        //keyboard.useDelimiter(" ");
        character1 = keyboard.next();
        before = String.valueOf(character1.charAt(0));
        //System.out.println(before); 
        character2 = keyboard.next();
        after = String.valueOf(character1.charAt(1));
        //System.out.println(after); 
    }       



    public static boolean finished(){
        if (scoreFirstTeam >= 50){
            return true;
        }
        else if (scoreSecondTeam >= 50){
            return true;
        }
        else{
            return false;}
    }
    public static void playGame(){

        while(!finished()){
            if (before== "a"){
                System.out.println("a");
            }
            if (after=="1"){
                System.out.println("1");
            }
            System.out.println("Enter a score.");
            userInput();
            if (before=="a" && after=="1"){
                scoreFirstTeam = (scoreFirstTeam +1);
                if (scoreFirstTeam > scoreSecondTeam){
                    System.out.println(nameFirstTeam +  " " + scoreFirstTeam + "," + nameSecondTeam + scoreSecondTeam + ";" + nameFirstTeam + " are winning.");
                }
                else if (scoreFirstTeam < scoreSecondTeam){
                    System.out.println(nameFirstTeam +  " " + scoreFirstTeam + "," + nameSecondTeam + scoreSecondTeam + ";" + nameSecondTeam + " are winning.");
                }
                else{
                    System.out.println(nameFirstTeam +  " " + scoreFirstTeam + "," + nameSecondTeam + scoreSecondTeam + "; The game is tied.");
                }
            }
            else if (before=="a" && after=="2"){
                scoreFirstTeam = (scoreFirstTeam +2);
                if (scoreFirstTeam > scoreSecondTeam){
                    System.out.println(nameFirstTeam +  " " + scoreFirstTeam + "," + nameSecondTeam + scoreSecondTeam + ";" + nameFirstTeam + " are winning.");
                }
                else if (scoreFirstTeam < scoreSecondTeam){
                    System.out.println(nameFirstTeam +  " " + scoreFirstTeam + "," + nameSecondTeam + scoreSecondTeam + ";" + nameSecondTeam + " are winning.");
                }
                else{
                    System.out.println(nameFirstTeam +  " " + scoreFirstTeam + "," + nameSecondTeam + scoreSecondTeam + "; The game is tied.");
                }
            }
            else if (before=="a" && after=="3"){
                scoreFirstTeam = (scoreFirstTeam +3);
                if (scoreFirstTeam > scoreSecondTeam){
                    System.out.println(nameFirstTeam +  " " + scoreFirstTeam + "," + nameSecondTeam + scoreSecondTeam + ";" + nameFirstTeam + " are winning.");
                }
                else if (scoreFirstTeam < scoreSecondTeam){
                    System.out.println(nameFirstTeam +  " " + scoreFirstTeam + "," + nameSecondTeam + scoreSecondTeam + ";" + nameSecondTeam + " are winning.");
                }
                else{
                    System.out.println(nameFirstTeam +  " " + scoreFirstTeam + "," + nameSecondTeam + scoreSecondTeam + "; The game is tied.");
                }
            }
            else if (before=="b" && after=="1"){
                scoreSecondTeam = (scoreSecondTeam +1);
                if (scoreFirstTeam > scoreSecondTeam){
                    System.out.println(nameFirstTeam +  " " + scoreFirstTeam + "," + nameSecondTeam + scoreSecondTeam + ";" + nameFirstTeam + " are winning.");
                }
                else if (scoreFirstTeam < scoreSecondTeam){
                    System.out.println(nameFirstTeam +  " " + scoreFirstTeam + "," + nameSecondTeam + scoreSecondTeam + ";" + nameSecondTeam + " are winning.");
                }
                else{
                    System.out.println(nameFirstTeam +  " " + scoreFirstTeam + "," + nameSecondTeam + scoreSecondTeam + "; The game is tied.");
                }
            }   
            else if (before=="b" && after=="2"){
                scoreSecondTeam = (scoreSecondTeam +2);
                if (scoreFirstTeam > scoreSecondTeam){
                    System.out.println(nameFirstTeam +  " " + scoreFirstTeam + "," + nameSecondTeam + scoreSecondTeam + ";" + nameFirstTeam + " are winning.");
                }
                else if (scoreFirstTeam < scoreSecondTeam){
                    System.out.println(nameFirstTeam +  " " + scoreFirstTeam + "," + nameSecondTeam + scoreSecondTeam + ";" + nameSecondTeam + " are winning.");
                }
                else{
                    System.out.println(nameFirstTeam +  " " + scoreFirstTeam + "," + nameSecondTeam + scoreSecondTeam + "; The game is tied.");
                }
            }       
            else {
                scoreSecondTeam = (scoreSecondTeam +3);
                if (scoreFirstTeam > scoreSecondTeam){
                    System.out.println(nameFirstTeam +  " " + scoreFirstTeam + "," + nameSecondTeam + scoreSecondTeam + ";" + nameFirstTeam + " are winning.");
                }
                else if (scoreFirstTeam < scoreSecondTeam){
                    System.out.println(nameFirstTeam +  " " + scoreFirstTeam + "," + nameSecondTeam + scoreSecondTeam + ";" + nameSecondTeam + " are winning.");
                }
                else{
                    System.out.println(nameFirstTeam +  " " + scoreFirstTeam + "," + nameSecondTeam + scoreSecondTeam + "; The game is tied.");
                }
            }               
        }
        System.out.println("");
    }

    public static void main(String[] args){
        BasketballGame game = new BasketballGame();
        game.playGame();
        while (finished()){

            if (scoreFirstTeam > scoreSecondTeam){ 
                System.out.println(nameFirstTeam + scoreFirstTeam + "," + nameSecondTeam + scoreSecondTeam + ";" + nameFirstTeam + " win!");
            }
            else if (scoreFirstTeam < scoreSecondTeam){
                System.out.println(nameFirstTeam + scoreFirstTeam + "," + nameSecondTeam + scoreSecondTeam + ";" + nameSecondTeam + " win!");   
            }
            else{
                System.out.println(nameFirstTeam + scoreFirstTeam + "," + nameSecondTeam + scoreSecondTeam + "; The game is a draw.");
            }
        }
    }
}
Yassin Hajaj
  • 21,337
  • 9
  • 51
  • 89
darmok
  • 11
  • 1
  • Here is the error: Exception in thread "main" java.util.NoSuchElementException: at java.util.Scanner.throwFor(Scanner.java:862); at java.util.Scanner.next(Scanner.java:1371); at BasketballGame.userInput(BasketballGame.java:16); at BasketballGame.playGame(BasketballGame.java:46); at BasketballGame.main(BasketballGame.java:125) – darmok Apr 01 '16 at 10:23
  • `if (before=="a" && after=="1")`: No: http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java – Tom Apr 01 '16 at 10:28
  • `NoSuchElementException` on Scanner mostly means that the read stream is closed: http://stackoverflow.com/questions/13042008/java-util-nosuchelementexception-scanner-reading-user-input – Tom Apr 01 '16 at 10:30
  • @Tom Yes but it doesn't happen within this code. This code actually works fine. – Yassin Hajaj Apr 01 '16 at 10:30
  • @YassinHajaj And when it works fine for you, then there must be some code in OPs project, which wasn't posted here ;P. – Tom Apr 01 '16 at 10:33
  • what is input you are providing on console? – Girdhar Singh Rathore Apr 01 '16 at 10:33
  • @Tom Indeed but it seems weird since he posted the `main` so it seems the full code has been posted. Or maybe OP's hiding something from us :) – Yassin Hajaj Apr 01 '16 at 10:36
  • @darmok what input you have provided, so this exception occurs – Girdhar Singh Rathore Apr 01 '16 at 10:40
  • @Tom Thank you for the correction. I will be mindful of the correct way in the future. Sadly, running the code still throws the same error(s).I have posted the code in its entirety. @ Girdhar My test input is: a 1. – darmok Apr 01 '16 at 18:14
  • Input "a 1" is not correct for your program. What is your real input (for both characters)? And please check if `after = String.valueOf(character1.charAt(1));` should be `after = String.valueOf(character2.charAt(0));` instead. – Tom Apr 01 '16 at 18:19

0 Answers0