为什么我会得到;“缺少返回语句”;Java中的错误,即使我在线程中有返回语句和异常,第二类中的主错误?
例如,我在这里得到的错误-这只是一个片段。我在3个不同的操作符中出错3次为什么我会得到;“缺少返回语句”;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;
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语句仍然有点困惑。我可以重新开始吗