如何从while循环返回String输入?

时间:2015-03-08 16:39:33

标签: java while-loop return

在我的代码中,我让用户输入“标题数”。然后,我提示用户输入标题名称,直到它等于用户之前输入的标题数量。我想要做的是在我的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,因为它包含用户输入的名称,但我不知道如何在循环外访问它。如果有人能告诉我如何做到这一点,我将不胜感激。

4 个答案:

答案 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对象并在循环内操作它们,因为它会导致更多的内存。最好根据您的选择使用StringBuilderStringBuffer

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;
}