Java 如何修复此返回编译错误?

Java 如何修复此返回编译错误?,java,Java,出现以下错误,我不确定如何解决: This method must return a result of type String 当“stringresult=fileRead(0,“months.txt”);”=0时,程序应该打印文件“months.txt”的所有行。当我指定要输出的行时,它可以在没有巨大if-else的情况下工作,但我不知道如何让它像这样工作 import java.util.Scanner; import java.io.File; import java.io.

出现以下错误,我不确定如何解决:

    This method must return a result of type String
当“stringresult=fileRead(0,“months.txt”);”=0时,程序应该打印文件“months.txt”的所有行。当我指定要输出的行时,它可以在没有巨大if-else的情况下工作,但我不知道如何让它像这样工作

import java.util.Scanner;
import java.io.File;
import java.io.IOException;

public class methodsExceptions1 {
    public static void main(String[] args) throws IOException {

        String result = fileRead(0, "months.txt");
        System.out.println(result);
    }

    public static String fileRead(int line, String f) throws IOException {

        File myFile = new File("months.txt");
        Scanner inputFile = new Scanner(myFile);

        if (line == 0 && inputFile.hasNextLine()) {
            System.out.println(inputFile.nextLine());
        } else {
            String lineRead = "";
            for (int i = 0; i < line; i++) {
                if (inputFile.hasNextLine()) {
                    lineRead = inputFile.nextLine();
                } else {
                    return "FILE READ ERROR: There are only " + i + " lines of text in this file";
                }
        }
        inputFile.close();

        return lineRead;
        }
    }
}
import java.util.Scanner;
导入java.io.File;
导入java.io.IOException;
公共类方法概念1{
公共静态void main(字符串[]args)引发IOException{
字符串结果=fileRead(0,“months.txt”);
系统输出打印项次(结果);
}
公共静态字符串fileRead(int行,字符串f)引发IOException{
File myFile=新文件(“months.txt”);
扫描仪输入文件=新扫描仪(myFile);
if(line==0&&inputFile.hasNextLine()){
System.out.println(inputFile.nextLine());
}否则{
字符串lineRead=“”;
对于(int i=0;i
您的方法只返回
else
分支中的字符串。如果
line==0&&inputFile.hasNextLine()
为true,则不返回任何内容

要修复错误,请在正分支中返回某些内容,或引发异常


可能您打算返回
inputFile.nextLine()
,而不是打印它。

如果将
return
语句放在If或If-else或else块中,则会出现此类错误

因此,您还应该从这些块中编写一个
return
语句。(此外,一些编辑器会在编码期间阻止此代码)

公共类方法概念1{
...
...
公共静态字符串fileRead(int行,字符串f)引发IOException{
File myFile=新文件(“months.txt”);
扫描仪输入文件=新扫描仪(myFile);
if(line==0&&inputFile.hasNextLine()){
System.out.println(inputFile.nextLine());
}否则{
字符串lineRead=“”;
对于(int i=0;i
你的方法是个骗子。通过它的签名,您可以期望它从文件中读取某些内容并将其作为字符串对象返回。但在一种情况下,它不返回任何内容,并将某些内容打印到控制台。他在骗你。避免方法中的副作用

如果您的方法只返回字符串,则可以对此进行改进。让方法的调用方决定是否打印此字符串

而不是

if (line == 0 && inputFile.hasNextLine())
    System.out.println(inputFile.nextLine());


如果代码格式正确,缩进良好,我想很明显,并非所有路径都返回值。看起来您还没有决定是打印行还是返回行。如果不使用,为什么要传递参数
String f
?当方法为0时,它应该使用第一个,否则它应该使用else。是的!这已经修复了它,谢谢,尽管它只输出txt文件的第一行,而我希望它输出文件的全部内容。是的,尽管它只打印txt文件的第一行,它应该打印整个文件,但它已经工作了。在这种情况下,请让您的方法在打印该行后返回null。而且它肯定应该有一个不同的名字来反映它的副作用。这是个坏习惯。非常感谢你的帮助!是的,谢谢你,虽然它只是打印出txt文件的第一行,它应该打印整个文件,但它已经工作了。
if (line == 0 && inputFile.hasNextLine())
    System.out.println(inputFile.nextLine());
if (line == 0 && inputFile.hasNextLine()) {
    return inputFile.nextLine();