在我的代码中,我让用户输入“标题数”。然后,我提示用户输入标题名称,直到它等于用户之前输入的标题数量。我想要做的是在我的main方法中调用方法时返回标题名称。但是,当我尝试返回我读取标题名称的变量时,无法访问它,因为它不在循环中。这是方法:
public static String getTitles(){
Scanner numberOfTitles = new Scanner(System.in);
System.out.println("Enter number of titles: ");
int titlesAmount = numberOfTitles.nextInt();
int count = 1;
while (count <= titlesAmount){
Scanner titlesReader = new Scanner(System.in);
System.out.println("Enter title: ");
String titlesInput = titlesReader.next();
count++;
}
return titlesInput;
}
我想返回变量titlesInput,因为它包含用户输入的名称,但我不知道如何在循环外访问它。如果有人能告诉我如何做到这一点,我将不胜感激。
答案 0 :(得分:1)
如果要从方法返回多个字符串,则必须返回字符串列表:
public static List<String> getTitles() { ... }
然后,在方法内部,只需添加要返回列表的所有字符串,并在结尾处返回列表:
Scanner inputReader = new Scanner(System.in);
System.out.println("Enter number of titles: ");
int titlesAmount = inputReader.nextInt();
int count = 1;
List<String> titles = new ArrayList();
while (count <= titlesAmount){
System.out.println("Enter title: ");
titles.add(inputReader.next());
count++;
}
return titles;
请注意,我只创建了一个Scanner
对象。您无需为此任务创建多个Scanner
。
但更好的解决方案是在方法之外的某个地方只有一个全局Scanner
对象,并将其用于满足您的所有输入需求。
答案 1 :(得分:1)
您必须在方法范围内定义变量。如果你想返回那个,那么不在while循环范围内。
最好不要使用直接的String对象并在循环内操作它们,因为它会导致更多的内存。最好根据您的选择使用StringBuilder
或StringBuffer
public static String getTitles(){
Scanner scanner = new Scanner(System.in);
System.out.println("Enter number of titles: ");
int titlesAmount = scanner.nextInt();
int count = 1;
StringBuilder sbReturn = new StringBuilder();
while (count <= titlesAmount){
System.out.println("Enter title: ");
sbReturn.append(scanner.next()).append(",");
count++;
}
return sbReturn.toString();
}
答案 2 :(得分:0)
您需要返回字符串列表(或数组)而不是单个字符串。
我改变了你的方法,这样你就可以大致了解我的意思。我不确定我的语法是否100%正确的Java,但它应该得到要点。
public static List<String> getTitles(){
Scanner numberOfTitles = new Scanner(System.in);
System.out.println("Enter number of titles: ");
int titlesAmount = numberOfTitles.nextInt();
int count = 1;
List <String> titles = new ArrayList<String>();
while (count <= titlesAmount){
Scanner titlesReader = new Scanner(System.in);
System.out.println("Enter title: ");
String titlesInput = titlesReader.next();
titles.add(titlesInput);
count++;
}
return titles;
}
答案 3 :(得分:0)
为了使变量的作用域位于最外层,您需要在while循环之外初始化String。编译器永远无法确定while循环语句中的代码是否会执行(即使条件为真),因此它不会将循环块中的任何变量泄漏到外部块。
除此之外,您还需要了解三件事。首先,您只需要一个Scanner对象来读取所有输入。其次,如果你想返回一堆字符串,在这种情况下,你的所有标题,你需要一个List<String>
对象作为你的返回类型。最后,每当你想迭代x次时,for循环总是比使用计数器变量的while循环更具可读性。
我会像这样重写你的代码:
public static List<String> getTitles() {
List<String> titles = new ArrayList<String>();
Scanner sc = new Scanner(System.in);
System.out.println("Enter number of titles: ");
int titlesAmount = sc.nextInt();
for (int i = 0; i < titlesAmount; i++) {
System.out.println("Enter title: ");
titles.add(sc.next());
}
return titles;
}