如何 return 来自 while 循环的字符串输入?
How can I return String inputs from a while loop?
在我的代码中,我让用户输入 "number of titles"。然后,我提示用户输入标题名称,直到它等于用户之前输入的标题数量。我想要做的是 return 在我的 main 方法中调用该方法时的标题名称。但是,当我尝试 return 我拥有的读取标题名称的变量时,无法访问它,因为它不在循环中。这是该方法:
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;
}
我想 return 变量 titlesInput,因为它包含用户输入的名称,但我不知道如何在循环外访问它。如果有人能告诉我该怎么做,我将不胜感激。
如果你想 return 来自该方法的多个字符串,你必须 return 一个字符串列表:
public static List<String> getTitles() { ... }
然后,在方法内部,只需将您想要 return 的所有字符串添加到列表中,然后 return 列表末尾:
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
对象,并将其用于您的所有输入需求。
您需要 return 字符串列表(或数组)而不是单个字符串。
我更改了您执行此操作的方法,以便您大致了解我的意思。我不确定我的语法对于 Java 是否 100% 正确,但它应该能理解要点。
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;
}
您必须在方法范围内定义变量。如果你想要 return 则不在 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();
}
为了使变量的范围位于最外层,您需要在 while 循环之外初始化 String。编译器永远无法确定 while 循环语句内的代码是否会执行(即使条件为真),因此它不会将循环块内的任何变量泄漏到外部块。
除此之外,您还需要了解三件事。首先,您只需要一个扫描仪 object 即可读取所有输入。其次,如果你想要 return 一堆字符串,在这种情况下,你的所有标题,你需要一个 List<String>
object 作为你的 return 类型。最后,每当您想迭代 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;
}
在我的代码中,我让用户输入 "number of titles"。然后,我提示用户输入标题名称,直到它等于用户之前输入的标题数量。我想要做的是 return 在我的 main 方法中调用该方法时的标题名称。但是,当我尝试 return 我拥有的读取标题名称的变量时,无法访问它,因为它不在循环中。这是该方法:
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;
}
我想 return 变量 titlesInput,因为它包含用户输入的名称,但我不知道如何在循环外访问它。如果有人能告诉我该怎么做,我将不胜感激。
如果你想 return 来自该方法的多个字符串,你必须 return 一个字符串列表:
public static List<String> getTitles() { ... }
然后,在方法内部,只需将您想要 return 的所有字符串添加到列表中,然后 return 列表末尾:
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
对象,并将其用于您的所有输入需求。
您需要 return 字符串列表(或数组)而不是单个字符串。
我更改了您执行此操作的方法,以便您大致了解我的意思。我不确定我的语法对于 Java 是否 100% 正确,但它应该能理解要点。
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;
}
您必须在方法范围内定义变量。如果你想要 return 则不在 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();
}
为了使变量的范围位于最外层,您需要在 while 循环之外初始化 String。编译器永远无法确定 while 循环语句内的代码是否会执行(即使条件为真),因此它不会将循环块内的任何变量泄漏到外部块。
除此之外,您还需要了解三件事。首先,您只需要一个扫描仪 object 即可读取所有输入。其次,如果你想要 return 一堆字符串,在这种情况下,你的所有标题,你需要一个 List<String>
object 作为你的 return 类型。最后,每当您想迭代 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;
}