如何在Java的类构造函数中使用Scanner两次?

2024-09-27 00:16:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Java初学者

我想做一个简单的角色类。 Character对象有两个参数:String name和ArrayList speechSet

请告诉我为什么我的第一个Java代码不能工作

我想使用Scanner(system.in)从控制台获取speechSet的名称和元素。 所以首先我在Python3中写道:

class Character:
    name = str()
    speechSet = list()
    characterList = list()
    def __init__(self):
        self.name = input("Name? : ")
        temp = input("Speeches? : ")
        self.speechSet = [i for i in temp.split(" ")]
        Character.characterList.append(self)
def main():
    j = Character()
    for item in Character.characterList:
        print(item.name)
        for speech in item.speechSet:
            print(speech)
if __name__ == '__main__':
    main()

当我运行这个,它的工作。 Console Success

我把它改成了Java

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

public class Character 
{
    String name;
    ArrayList<String> speechSet = new ArrayList<String>();

    public static ArrayList<Object> characterList = new ArrayList<Object>();

    public Character() 
    {
        //Type name
        Scanner nameScan = new Scanner(System.in);
        System.out.println("Name? : ");
        this.name = nameScan.next();
        nameScan.close();


        //Type Dialogue
        Scanner setScan = new Scanner(System.in);
        while (true)
        {
            System.out.println("speechs? : ");
            String str = setScan.nextLine();
            String[] words = str.split(" ");
            for (int i = 0 ; i < words.length ; i++)
            {
                this.speechSet.add(words[i]);
            }
            break;
        }

        setScan.close();

    }


    public static void main(String[] args)
    {
        Character J = new Character();

        System.out.println(J.name);
        for (String speech : J.speechSet)
        {
            System.out.println(speech);
        }
    }
}

它返回一个错误

Name? : 
j_NAME
speechs? : 
Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1540)
    at Char_Touch.Character.<init>(Character.java:29)
    at Char_Touch.Character.main(Character.java:45)

我改变了一个构造器如下:


public class Character
{
    public Character() 
    {
        this.name = "J_NAME";

        //Type Dialogue
        Scanner setScan = new Scanner(System.in);
        while (true)
        {
            System.out.println("speechs? : ");
            String str = setScan.nextLine();
            String[] words = str.split(" ");
            for (int i = 0 ; i < words.length ; i++)
            {
                this.speechSet.add(words[i]);
            }
            break;
        }

        setScan.close();

    }
...
}

而且成功了

speechs? : 
Hello Python I am Java
J_NAME
Hello
Python
I
am
Java

Tags: nameinnewforstringmainjavapublic

热门问题