变量类型问题java

时间:2010-12-18 20:18:00

标签: java methods casting

所以这是我的问题,我试图在数组中搜索一个值,然后返回索引以及字符串名称。

但我的问题是,当我返回索引时,它将其设置为字符串,因为这就是方法调用的内容,因此当我尝试键入强制转换索引以更改为字符串时,我的编译器会抛出错误。以下是一些方法的麻烦,如果你们想看到它,我可以发布我的整个代码。

public static String studentGrade(Scanner stdIn)
{
    System.out.print("What student do you want to enter a grade for?");
    String searchName=stdIn.next();
    String index = findStudent(students, searchName);
    int studentId =(int) currentStudentId(students, searchName);

    if (index == searchName) 
    {    
        System.out.println("Student was found, " + index + studentId);
        System.out.println("What is the grade that you want to input for this student?");
        String input = stdIn.next();
        String studentGrade = input;
        return studentGrade;
    }    
    else 
    {    
        System.out.println("not found"); 
    }
}

public static String findStudent(String[] students, String searchName)
{
    for (int i = 0; i < students.length; i++)
    {
        if (students[i].equals(searchName))
        {
            String currentStudentId = i;
            return currentStudentId;
            return searchName;
        }
    } // end for 
    String fail = "fail";
    return fail;
} // end findStudent

3 个答案:

答案 0 :(得分:2)

我不相信将String和index作为int返回是一个好主意。为什么不通过查找包含所有学生的数组来返回索引并获取学生。 如果找不到学生,您可以返回例如-1。

这就是我的意思:

String[] students = new String[] { ... };

//...

int indexFound = findStudent(students, "John Doe");
if (indexFound >= 0) {
   String studentFound = students[indexFound];
}

PS。您的代码包含错误(例如加倍返回命令)

答案 1 :(得分:1)

为什么要将searchNamefindStudent()返回到通过参数传递的方法。

当然,调用者方法已经具有该值。只需返回索引:

实施例

public static int findStudent(String[] students, String searchName)
{
    for (int i = 0; i < students.length; i++)
    {
        if (students[i].equals(searchName))
        {
            return i;
        }
    } // end for 
    int fail = -1;
    return fail;
} // end findStudent

答案 2 :(得分:0)

索引自然是int,而不是String。你应该返回一个int。

假设这是作业,你必须返回一个字符串,你可以使用以下代码将数字转换为字符串。

return ""+currentStudentId;

但是,您遇到的问题是您尝试返回两个值。

我怀疑你误解了这些要求,我建议你再读一遍。

一个较短的例子,使用varargs

public static int findString(String string, String... strings) {
    for (int i = 0; i < strings.length; i++)
        if (strings[i].equals(string))
            return i;
    return -1; // for not found.
}

甚至以下适用于任何类型。

public static <T> int indexOf(T t, T... ts) {
    for (int i = 0; i < ts.length; i++)
        if (ts[i].equals(t))
            return i;
    return -1; // for not found.
}

e.g。

int found = indexOf(5, 1,3,5,7); // found = 2;
相关问题