【问题标题】:"Missing Return Statement", with while loop“缺少返回语句”,带有 while 循环
【发布时间】:2014-07-26 02:43:37
【问题描述】:

此代码遇到返回错误。我会很感激被告知如何解决它,并且比前者更重要的是解释为什么有必要这样做。我的教授在解释很多事情是如何运作的方面做得非常出色,所以现在我觉得我需要学习很多应该已经知道的东西。谢谢大家!

import java.io.*;               //Imports any file operation (ie Reading or Writing)
import java.util.Scanner;       //Imports scanner class
import javax.swing.JOptionPane; //Import JOptionPane to allow dialog boxes

public class program7
{
    public String MakeFile() throws IOException
    {
        String NameofDataFile, inputted_text, temp, e;

        temp = "";

        NameofDataFile=JOptionPane.showInputDialog("Enter the name of the file to be opened: ");    //creates file with entered name

        /*allows file to be written in*/
        PrintWriter FileObj = new PrintWriter (new FileWriter (NameofDataFile));

        inputted_text=JOptionPane.showInputDialog("Enter a String: ");                                    //asks user for a string
        e = inputted_text;

        while (e == temp)

            return null;
    }

}

【问题讨论】:

  • 如果e 不是== temp 怎么办?它不会。阅读:how to compare strings in Java.
  • 你真的不需要专业人士的帮助。在上面的代码中,只有进入while循环才会执行return。如果代码没有进入 while 循环,那么您不会为这种情况返回任何内容。顺便说一句,你为什么不总是把代码放在 {} 里面?我不明白教授怎么能解释得这么糟糕。
  • 题外话,但你应该知道:Java 类应该大写为UppercaseStartingCamelCase。变量名应大写为lowercaseStartingCamelCase。所以你的类应该是Program7,方法应该是makeFile(),你的变量应该是nameOfDataFilefileObjinputtedText。但是,我们直接称它们为dataFileNamefileinput 怎么样(更简洁,更少冗余)。

标签: java return


【解决方案1】:

如果e 不等于temp,则不会有return 语句。您也可能想使用if,因为while 用于循环。但就您所写的而言,这不是一个循环。程序在输入while 后立即返回。或者你的代码可能还没有完成,你想在while 里面放一些东西。然后你应该在while 之后添加一个{} 括号块。

while(e.equals(temp)) {
// do something
}
return null; // maybe you shouldn't return null. You should return a String

【讨论】:

  • 轻微的吹毛求疵 -- temp.equals(e) 在 e 为空的情况下更加健壮。
【解决方案2】:

此声明

 while (e == temp)
   return null;

当(且仅当)e 与 temp 具有引用标识时,将返回 null。所以,你应该使用equals。最后,如果从未输入过该循环,则需要返回一些内容(就 JRE 而言是有效路径)-

 if (e.equals(temp)) {
   // if e is equal to temp, no need for a while as far as I see.
   return null;
 }
 return e;

【讨论】:

    【解决方案3】:

    您需要确保无论代码中发生什么,您都会返回一些内容。如果您有条件语句 (if) 或循环 (forwhile),则需要确保有针对条件块或循环永远不会执行的情况的返回语句。

    例如:

    public int example(int n){
        while (n > 0)
             return n;
        //what happens if n is <= 0?
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-15
      • 2016-01-30
      • 2014-03-22
      • 1970-01-01
      • 2014-05-28
      • 2012-12-02
      • 2015-08-11
      相关资源
      最近更新 更多