gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:28:51 26 4
gpt4 key购买 nike

我是Java初学者。

我正在尝试制作一个简单的Character类。
字符对象带有2个参数,即字符串名称和ArrayList speechSet。

请让我知道为什么我的第一个Java代码不起作用。

我想使用Scanner(system.in)从控制台获取语音集的名称和元素。
所以首先我在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

最佳答案

我已经解决了

有人告诉我“ 已由Scanner.close()关闭,并且不会再次打开。”

关于java - 如何在Java的类构造函数中两次使用Scanner?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59279895/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com