【问题标题】:How to use a for loop inside a return method?如何在返回方法中使用 for 循环?
【发布时间】:2016-12-16 01:25:36
【问题描述】:

对于这个程序,我正在努力在返回方法(“notString”)中创建一个 for 循环。我试图让程序六次询问姓名;但是,我收到一个错误,告诉我添加一个返回值,它位于 for 循环内。

这是我必须创建程序的语句:给定一个字符串,返回一个新字符串,其中“not”已添加到前面。但是,如果字符串已经以“not”开头,则返回原样的字符串。

import java.util.*;
 public class practice1 {
 public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    String answer= notString(sc);
    System.out.println(answer);

}
public static String notString(Scanner sc){
    for(int i=0; i<=6;i++){
      System.out.println("Input Name: ");
      String name= sc.nextLine();
      if(name.startsWith("not")){
          return name;
      }else 
          return "not"+name ;
      }
    }

}

【问题讨论】:

  • 如果您查看您的代码,您会发现它在 for 循环中无条件地是 returning - 有一个循环有什么意义?
  • 您是要实际记录六个姓名,还是计划允许对某个输入最多进行六次尝试?
  • 我正计划从扫描仪获取多个输入。
  • 所以它应该将名称存储在字符串数组中?
  • 是的,我认为我应该这样做。

标签: java return


【解决方案1】:

这个问题有两个方面。

第一个方面是 Java 编译器告诉您它“认为”您的方法有多种方法可以在不进行显式返回的情况下结束。

实际上,并非如此。有可能证明循环之后的代码(写的)是没有办法到达的。

然而,根据编译器需要实现的JLS代码可达性规则,有可能到达方法的末尾。因此,必须在循环之后有一个return 语句。

但更深层的方面是你所做的事情是错误的。你所写的不会要求一个字符串六次,这是必须的。

它实际上会在询问一次后“放弃”。 return 声明说“立即返回”。在您放置return 语句的地方,如果某物是truefalse,您将返回“NOW”;即总是

如果你想问六次,那么:

  • 不要从循环中间返回,或者
  • 将循环移至 main 方法。

我无法告诉您哪种方法是正确的,因为您对程序应该/需要做什么的解释不完整。

【讨论】:

    【解决方案2】:

    是的,您必须为方法 notString() 提供一个返回语句,该语句承诺在方法签名中返回一个字符串。以下程序将编译并运行(尽管我不确定它是否是您的最终程序):

    修改程序:

    import java.util.*;
    
    public class Practice1 {
        public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);
            String answer= notString(sc);
            System.out.println(answer);
    
        }
        public static String notString(Scanner sc) {
            String answer = "";
            for(int i=0; i<=6; i++){
                System.out.println("Input Name: ");
                String name= sc.nextLine();
                if(name.startsWith("not")){
                    return name;
                } else { 
                    return "not" + name;
                }
    
            }
            return answer;  // Problem 2: missed a return statement
        }                   // Problem 1: missed a closing brace
    }   
    

    【讨论】:

      【解决方案3】:

      程序在语法和结构上都有错误。在这种情况下,拥有一个方法并传递扫描仪对象是没有意义的。如果您只想将 6 个输入作为它们来的时候打印出来。

      import java.util.*;
      public class practice1 {
          public static void main(String[] args) {
              Scanner sc=new Scanner(System.in);
              for(int i=0; i<=6;i++){
                  String temp = sc.nextLine();
                  String answer = temp.startsWith("not")?temp : "not" + temp;
                  System.out.println(answer);
              }
              scanner.close();
          }
      }
      

      如果您想将它们存储在数组中并稍后立即打印它们。

      import java.util.*;
      public class practice1 {
          public static void main(String[] args) {
              String[] names = new String[6];
              Scanner sc=new Scanner(System.in);
              for(int i=0; i<=6;i++){
                  String temp = sc.nextLine();
                  String answer = temp.startsWith("not")?temp : "not" + temp;
                  names[i] = answer;
              }
              scanner.close();
      
              for(String name : names){
                  System.out.println(name);
              }
      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2019-05-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-02
        • 2022-09-26
        • 2015-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多