两个方法添加到同一个arraylist获取扫描程序错误

时间:2015-11-09 06:46:15

标签: arraylist methods java.util.scanner

我正在为最终项目写一个游戏。游戏的目标是尽可能多地获得猫。获得猫的一种方法是采用它。所以我有以下方法:

    public void adoptCat()
    {
        Scanner keyboard = new Scanner(System.in);

        catCounter++;

        System.out.println("You just adopted a cat! It needs a name. "
            + "Please enter in a name for your new cat: ");
        String catName = keyboard.nextLine();
        catNames.add(catName);
        catHealth.add(100);

        scoreCounter = scoreCounter + 10;
        keyboard.close();
    }

当我打印出arraylist时,第一种方法可以正常工作。但是一旦我调用另一种方法,它就会给我一个错误,说没有找到任何行。我想知道我是否需要先以某种方式冲洗扫描仪,或者为什么它不会让我输入第二个名字。这是我到目前为止的代码:

public class Agnus 
{
        private int catCounter = 0;
        private int scoreCounter = 0;

        private ArrayList<String> catNames = new ArrayList<>();
        private ArrayList<Integer> catHealth = new ArrayList<>();


    public void findStray()
    {
        Scanner keyboard = new Scanner(System.in);

        catCounter++;

        System.out.println("You just found a feral cat! It needs a name. "
            + "Please enter in a name for your new cat: ");
        String name = keyboard.nextLine();
        catNames.add(name);
        catHealth.add(100);     

        scoreCounter = scoreCounter + 5;
        keyboard.close();
    }

    public void adoptCat()
    {
        Scanner keyboard = new Scanner(System.in);

        catCounter++;

        System.out.println("You just adopted a cat! It needs a name. "
            + "Please enter in a name for your new cat: ");
        String name = keyboard.nextLine();
        catNames.add(name);
        catHealth.add(100);

        scoreCounter = scoreCounter + 10;
        keyboard.close();
    }

    public void stealCat()
    {
        Scanner keyboard = new Scanner(System.in);

        catCounter++;

        System.out.println("You just stole your neighbors cat! It needs"
            + " a new name. Please enter in a name for your new cat: ");
        String name = keyboard.nextLine();
        catNames.add(name);
        catHealth.add(100);

        scoreCounter = scoreCounter + 20;
        keyboard.close();
    }
}

演示代码如下所示:

public class AgnusDemo 
{

    public static void main(String[] args)
    {
        Agnus agnus = new Agnus();

        agnus.adoptCat();
        System.out.println(agnus);

        agnus.stealCat();
        System.out.println(agnus);


    }
}

这就是我得到的错误:

You just adopted a cat! It needs a name. Please enter in a name for your new cat: 
James
Here are all your cat's names and their health: 
[James] ---> [100]
You just stole your neighbors cat! It needs a new name. 
Please enter in a name for your new cat: 
Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1540)
    at Agnus.stealCat(Agnus.java:78)
    at AgnusDemo.main(AgnusDemo.java:12)

我希望我尽可能清楚地说明这一点。希望我提供了足够的信息。如果没有让我知道。谢谢你能给我的任何帮助!

米什

1 个答案:

答案 0 :(得分:0)

尝试在类级别创建扫描程序对象

import java.util.ArrayList;
import java.util.Scanner;

public class Agnus {
    private int catCounter = 0;
    private int scoreCounter = 0;

    private ArrayList<String> catNames = new ArrayList<>();
    private ArrayList<Integer> catHealth = new ArrayList<>();

    Scanner keyboard = new Scanner(System.in);//<-- create the scanner   
                                              //object at class level

public void findStray()
{


    catCounter++;

    System.out.println("You just found a feral cat! It needs a name. "
        + "Please enter in a name for your new cat: ");
    String name = keyboard.nextLine();
    catNames.add(name);
    catHealth.add(100);     

    scoreCounter = scoreCounter + 5;

}

public void adoptCat()
{


    catCounter++;

    System.out.println("You just adopted a cat! It needs a name. "
        + "Please enter in a name for your new cat: ");
    String name = keyboard.nextLine();
    catNames.add(name);
    catHealth.add(100);

    scoreCounter = scoreCounter + 10;

}

public void stealCat()
{


    catCounter++;

    System.out.println("You just stole your neighbors cat! It needs"
        + " a new name. Please enter in a name for your new cat: ");

    String name = keyboard.next();
    catNames.add(name);
    catHealth.add(100);

    scoreCounter = scoreCounter + 20;

    }
}