【问题标题】:two methods that add to the same arraylist getting scanner error添加到同一个数组列表的两种方法获取扫描仪错误
【发布时间】:2015-11-09 06:46:15
【问题描述】:

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

    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)

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

米什

【问题讨论】:

    标签: arraylist methods java.util.scanner


    【解决方案1】:

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

    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;
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 2013-04-17
      • 2015-05-02
      • 2018-08-01
      相关资源
      最近更新 更多