关于eclipse检测到的代码错误以及创建运行方法的对象的问题

时间:2015-10-15 05:17:37

标签: java oop

我是Java的新手。我正在尝试创建一个名为Database的类,它将读取一个文本文件来创建一个数组。这段代码中没有主要方法,因为我有另一个java文件作为主应用程序,它有主要方法。

这是我的代码:

public class Database {

    public static String[][] items = new String[20][3];

    public static String[][] fillArray(String myFile)
    {
        TextFileInput in = new TextFileInput(myFile);
        for(int i=0; i<20; i++)
        {
            String line =in.readLine();
            StringTokenizer token = new StringTokenizer(line, ",");
            for(int j=0; j<3; j++)
            {
                items[i][j] = token.nextToken();
            }
        }
        in.close();
        return items;
    }

    public static String getName(String code)
    {
        for(int i=0; i<20; i++)
        {
            if (code.equals(items[i][0]))
                return items[i][1];
        }
    }

    public static String getPrice(String code)
    {
        for(int i=0; i<20; i++)
        {
            if(code.equals(items[i][0]))
                return items[i][2];
        }
    }
}

问题1:Eclipse通过指示两种方法(getName和getPrice)来显示错误。它说:&#34; 此方法必须返回String &#34;类型的结果。任何人都可以解释并解决这个问题吗?

问题2:此数据库类包括通过读入文本文件创建的方法和数组。我有另一个java文件,它是包含main方法的主要应用程序文件。主应用程序文件是我想要创建对象并调用方法的文件。我理解这个概念,但是当我尝试创建数据库对象并调用此对象上的方法时,我不断收到错误。有人可以通过这个课程向我展示一个例子吗?

6 个答案:

答案 0 :(得分:1)

答案1:您在getName&amp; getPrice方法在内部,如果可能执行的块,或者不是基于满足的条件,因此编译器会给出错误。

在方法返回之前,你需要有return语句。

答案2:由于数据库类中的所有方法都是static,因此您无需创建对象,您可以使用classname直接调用它,例如Database.getName("code")

答案 1 :(得分:0)

Java和Eclipse无法知道代码是否等于items [i] [0]。这就是为什么getName可能没有返回值。

 public static String getName(String code)
 {
     for(int i=0; i<20; i++)
     {
         if (code.equals(items[i][0]))
             return items[i][1];
     }
     return "";// or null
 }

答案 2 :(得分:0)

对于This method must return a result of type String,eclipse说你的方法返回类型是String,所以你必须在任何情况下都返回一个String,但是你的return语句在if()里面如果if里面的条件永远不是真的那么就没有了return语句所以在你的方法中添加一个默认的return语句,返回类型为String。

public static String getPrice(String code) {
    for (int i = 0; i < 20; i++) {
        if (code.equals(items[i][0])) return items[i][2];
    }
    return null;
}

答案 3 :(得分:0)

在您的方法getNamegetPrice中,当您if位于return时,您已设置condition条件和方法true这就是为什么你有compilation问题。

要解决此问题,请添加else条件should return或添加if after完成if块。

答案 4 :(得分:0)

您的方法声明是

public static String getName(){...}
public static String getPrice(){...}

让我们分析一下,静态关键字意味着它是一种静态方法。 String表示此方法返回String的对象类型。 但是,您返回String数组对象,而不是String对象。 返回也在if语句中,如果if条件不满足,它就不会返回任何内容,但是你必须总是返回一个String类型的对象类型。

因此,如果代码永远不会进入if块

,则在if语句后添加一个return
if(YOUR CONDITION) {
     //do stuff
     //return stuff
}

//if never enters if block returns null
return null;

您的删除必须是

public static String[][] getName(){...}
public static String[][] getPrice(){...}

答案 5 :(得分:0)

  

Eclipse通过指示两种方法(getName和   用getPrice)。它说:“此方法必须返回类型的结果   字符串“。有人可以解释并解决这个问题吗?

方法签名声明返回类型为String:

public static String getName(String code)

所以你必须归还它。例如:

public static String getName(String code) {
String result = null;
// Perform work and update value in result.
return result;
}
  

有人可以通过这个课程向我展示一个例子吗?

您需要在调用任何实例方法之前实例化该类,而不是静态方法。例如:

String result = Database.getName("code"); //pass some string as input argument and get result.

另外请注意为什么你声明所有方法都是静态的?你need to understand why you really need static methods