为什么我会得到;“缺少返回语句”;Java中的错误,即使我在线程中有返回语句和异常,第二类中的主错误?

为什么我会得到;“缺少返回语句”;Java中的错误,即使我在线程中有返回语句和异常,第二类中的主错误?,java,Java,例如,我在这里得到的错误-这只是一个片段。我在3个不同的操作符中出错3次 public boolean delete(String name) { for (int i = 0; i < directory.length; i++) { if (directory[i].equalsIgnoreCase(name)) { directory[i] = null; return true;

例如,我在这里得到的错误-这只是一个片段。我在3个不同的操作符中出错3次

   public boolean delete(String name) {
      for (int i = 0; i < directory.length; i++) {
         if (directory[i].equalsIgnoreCase(name)) {
            directory[i] = null;
            return true;
         }   
         else
            return false;
      }
   }
下面是我的目录类的代码:

import java.util.*;
import java.io.*;
public class Directory {
   //public static void main(String[] args) {
   final int maxDirectorySize = 1024;
   String directory[] = new String[maxDirectorySize];
   int directorySize = 0;
   File directoryFile = null;
   Scanner directoryDataIn = null;

   public Directory(String directoryFileName) {
      directoryFile = new File(directoryFileName);
      try {
         directoryDataIn = new Scanner(directoryFile);
      }
      catch (FileNotFoundException e) {
         System.out.println("File is not found, exiting!" + directoryFileName);
         System.exit(0);
      }
      while (directoryDataIn.hasNext()) {
         directory[directorySize++] = directoryDataIn.nextLine();
      }
   }
   public boolean inDirectory(String name) {
      for (int i = 0; i < directory.length; i++) {
         if (directory[i].equalsIgnoreCase(name)) 
            return true;
         else 
            return false;
      }
   }
   public boolean add(String name) {
      if (directory.length == 1024)
         return false;
      for (int i = 0; i < directory.length; i++) {
         if (directory[i].equalsIgnoreCase(name))
            return false;
         else
            directory[directorySize++] = name;
            return true;
      }
   }          

   public boolean delete(String name) {
      for (int i = 0; i < directory.length; i++) {
         if (directory[i].equalsIgnoreCase(name)) {
            directory[i] = null;
            return true;
         }   
         else
            return false;
      }
   }

   public void closeDirectory() {
      directoryDataIn.close();
      PrintStream directoryDataOut = null;
      try {
          directoryDataOut = new PrintStream(directoryFile);
      }
      catch (FileNotFoundException e) {
         System.out.printf("File %s not found, exiting!", directoryFile);
         System.exit(0);
      }
      String originalDirectory[] = {"Mike","Jim","Barry","Cristian","Vincent","Chengjun","susan","ng","serena"};
      if (originalDirectory == directory)
         System.exit(0);
      else
         for (int i = 0; i < directorySize; i++)
            directoryDataOut.println(directory[i]);
         directoryDataOut.close();
   }
}
import java.util.*;
导入java.io.*;
公共类目录{
//公共静态void main(字符串[]args){
最终整数maxDirectorySize=1024;
字符串目录[]=新字符串[maxDirectorySize];
int directorySize=0;
文件目录File=null;
Scanner directoryDataIn=null;
公共目录(字符串目录文件名){
directoryFile=新文件(directoryFileName);
试一试{
directoryDataIn=新扫描仪(directoryFile);
}
catch(filenotfounde异常){
System.out.println(“未找到文件,正在退出!”+directoryFileName);
系统出口(0);
}
while(directoryDataIn.hasNext()){
目录[directorySize++]=directoryDataIn.nextLine();
}
}
公共布尔索引目录(字符串名称){
for(int i=0;i
关键是编译器根本不知道是否会输入for循环。因此,在for循环结束后,也需要一个最终返回。换句话说:在方法中可能采用的任何路径都需要一个最终返回语句。实现这一点的一个简单方法…是只使用一个返回语句ng>return语句;并将其放在方法的最后一行。这可能如下所示:

 Object getSomething() {
   Object rv = null; // rv short for "returnValue"
   for (int i=0; i < myArray.length; i++) {
     if (whatever) {
       rv = godKnowsWhat;
     } else {
       rv = IdontCare;
     }
   }
   return rv;
 }
但是当你仔细看的时候,你会发现在else后面有两种说法

 else
        directory[directorySize++] = name;
        return true;
所以这实际上看起来像

 else
        directory[directorySize++] = name;
 return true;
意思:总是在你所有的区块周围放{strong},即使是(假设的)一行then/else行。当一行变成两行时,这有助于避免此类错误(反之亦然;-)

“NoClassDefFoundException”的意思是:在指定给java的类路径中……没有类目录


要解决这个问题,您应该研究java类路径是关于什么的;以及如何正确设置它。

问题是编译器根本不知道是否会输入for循环。因此,您也需要在for循环结束后返回一个最终的。换句话说,在方法中可能采用的任何路径eds一个最终的返回语句。实现这一点的一个简单方法是,只有一个返回语句;并将其放在方法的最后一行。这可能类似于:

 Object getSomething() {
   Object rv = null; // rv short for "returnValue"
   for (int i=0; i < myArray.length; i++) {
     if (whatever) {
       rv = godKnowsWhat;
     } else {
       rv = IdontCare;
     }
   }
   return rv;
 }
但是当你仔细看的时候,你会发现在else后面有两种说法

 else
        directory[directorySize++] = name;
        return true;
所以这实际上看起来像

 else
        directory[directorySize++] = name;
 return true;
意思:总是在你所有的区块周围放{strong},即使是(假设的)一行then/else行。当一行变成两行时,这有助于避免此类错误(反之亦然;-)

“NoClassDefFoundException”的意思是:在指定给java的类路径中……没有类目录


要解决这个问题,您应该研究java类路径是关于什么的;以及如何正确设置它。

您需要一个
return
也在
for循环之后。
在前两个函数中,如果for循环不执行,那么return语句将不会被命中。因为它看起来像是我需要放入循环中的所有内容…是否可以返回null?@suboptimal如果
目录.length
为零,则需要返回
布尔值。例如,在
删除(字符串)中
method您应该添加
return
false;`作为方法中的最后一个语句。
null
在该方法中不是有效值。在
for循环之后还需要
return
。在前两个函数中,如果for循环未执行,则不会命中return语句。什么类型的return statem如果
目录.length
为零,则需要返回
布尔值。例如,在
删除(字符串)中
method您应该添加
return
false;`作为方法中的最后一个语句。
null
在这个方法中不是有效值。我明白你对大括号的意思。我刚才已经解决了这个问题。但是我对return语句仍然有点困惑。我可以重新开始吗