Java 如何从while循环返回字符串输入?

Java 如何从while循环返回字符串输入?,java,while-loop,return,Java,While Loop,Return,在我的代码中,我让用户输入“标题数”。然后,我提示用户输入标题名称,直到它等于用户刚才输入的标题数量。我要做的是在调用main方法中的方法时返回标题名。但是,当我试图返回读取标题名的变量时,它无法被访问,因为它超出了循环。以下是该方法: public static String getTitles(){ Scanner numberOfTitles = new Scanner(System.in); System.out.println("Enter number of titl

在我的代码中,我让用户输入“标题数”。然后,我提示用户输入标题名称,直到它等于用户刚才输入的标题数量。我要做的是在调用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;
}
公共静态字符串getTitles(){
扫描仪编号标题=新扫描仪(System.in);
System.out.println(“输入标题数:”);
int titlesAmount=numberOfTitles.nextInt();
整数计数=1;

而(count如果要从方法返回多个字符串,则必须返回字符串列表:

public static List<String> getTitles() { ... }
公共静态列表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 inputReader=新扫描仪(System.in);
System.out.println(“输入标题数:”);
int titlesAmount=inputReader.nextInt();
整数计数=1;
列表标题=新的ArrayList();
而(count您需要返回字符串列表(或数组),而不是单个字符串

我改变了你的方法,这样你就可以大致了解我的意思。我不确定我的语法对于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;
}
公共静态列表getTitles(){
扫描仪编号标题=新扫描仪(System.in);
System.out.println(“输入标题数:”);
int titlesAmount=numberOfTitles.nextInt();
整数计数=1;
列表标题=新的ArrayList();

while(count必须在方法范围内定义变量。如果要返回该变量,则不在while循环范围内。 最好不要使用直接字符串对象并在循环中操作它们,因为这会导致更多内存。最好根据您的选择使用
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();
}
公共静态字符串getTitles(){
扫描仪=新的扫描仪(System.in);
System.out.println(“输入标题数:”);
int titlesAmount=scanner.nextInt();
整数计数=1;
StringBuilder sbReturn=新StringBuilder();

while(count为了使变量的作用域位于最外层,需要在while循环外部初始化字符串。编译器永远无法确定while循环语句内部的代码是否会执行(即使条件为true)因此它不会将循环块内的任何变量泄漏到外部块

除此之外,您还需要知道三件事。第一,您只需要一个Scanner对象来读取所有输入。第二,如果您想要返回一组字符串,在本例中是所有标题,您需要一个
列表
对象作为返回类型。最后,每当您想要迭代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;
}
公共静态列表getTitles(){
列表标题=新的ArrayList();
扫描仪sc=新的扫描仪(System.in);
System.out.println(“输入标题数:”);
int titlesAmount=sc.nextInt();
对于(int i=0;i
返回字符串的方法只能返回一个字符串。您希望返回多个字符串。因此该方法应返回字符串数组(或列表)。请阅读有关阵列的教程:。此外,您需要一个扫描仪来读取所有内容。无需每次读取内容时都创建一个新的扫描仪。@VeselRomic,但我比您快了1分钟;)并修复了多扫描仪问题。这就是我打字速度慢的原因。:)@Takendarkk哦,我忘了。我更正了。感谢您的评论和代表:)