鱼C论坛

 找回密码
 立即注册
查看: 308|回复: 2

[已解决]Java键盘输入即查找信息

[复制链接]
发表于 2024-4-13 19:21:23 | 显示全部楼层 |阅读模式
25鱼币
屏幕截图 2024-04-13 191416.png 屏幕截图 2024-04-13 191513.png

错误提示:
此行的多个标记
        - 不能对类型 Test 中的非静态方法 f(Student[], String)进行静态引用
        - 类型 Test 中的方法 f(Student[], String)对于参数(Student[],
         int)不适用


有什么方法可以键盘录入,还能查找数组的索引,和找我想找的,已经录入的信息
最佳答案
2024-4-13 19:21:24
根据鱼油提供的图片,Java 程序遇到了两个错误:

  • 不能对类型 Test 中的非静态方法 f(Student[], String)进行静态引用:这个错误发生是因为试图在 main 方法(一个静态方法)内部调用 f 方法(一个非静态方法)而不创建一个 Test 类的实例。在 Java 中,静态方法可以直接调用其他静态方法,但如果想从静态方法中调用非静态方法,需要创建类的一个实例。
  • 类型 Test 中的方法 f(Student[], String)对于参数(Student[], int)不适用:这个错误是因为尝试传递一个 int 类型的参数给一个期望 String 类型参数的方法。在的 f 方法中,第二个参数应该是一个 String 类型的学生ID,但从 main 方法传入的是一个 int 类型的值。


要解决这些问题,可以:

  • 将 f 方法改为静态的,这样就可以从 main 方法中直接调用它,不需要创建 Test 类的实例。
  • 确保从 main 方法传递给 f 方法的第二个参数是一个字符串,这意味着它应该是学生的 ID,不是其他类型的数值。

此外,若想通过键盘录入来查找数组的索引,并找到想要的已经录入的信息。

确保使用正确的数据类型来接收用户输入,并正确处理这些数据来查找数组中的相应元素。

代码参考:
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // ... 省略其他部分的代码 ...

        System.out.println("请输入要查找的学生学号: ");
        String a = sc.next(); // 这里改为接收字符串输入

        int suoy = f(test, a); // 确保这里传递的是字符串类型的 ID

        // 这里可以添加代码来输出找到的信息或者处理找不到的情况
        if (suoy != -1) {
            // 输出找到的学生信息
        } else {
            // 未找到学生信息的处理
        }
    }

    // 将方法 f 改为静态的
    public static int f(Student[] test, String sid) {
        for (int i = 0; i < test.length; i++) {
            String id = test[i].getSid();
            if (id.equals(sid)) { // 这里应该用 .equals 方法来比较字符串
                return i;
            }
        }
        return -1;
    }
}
if 语句中使用 .equals 来比较字符串,而不是 ==,因为 == 在 Java 中比较的是对象引用,而不是字符串的内容。

最佳答案

查看完整内容

根据鱼油提供的图片,Java 程序遇到了两个错误: [*]不能对类型 Test 中的非静态方法 f(Student[], String)进行静态引用:这个错误发生是因为试图在 main 方法(一个静态方法)内部调用 f 方法(一个非静态方法)而不创建一个 Test 类的实例。在 Java 中,静态方法可以直接调用其他静态方法,但如果想从静态方法中调用非静态方法,需要创建类的一个实例。 [*] 类型 Test 中的方法 f(Student[], String)对于参数(Student[], ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-13 19:21:24 | 显示全部楼层    本楼为最佳答案   
根据鱼油提供的图片,Java 程序遇到了两个错误:

  • 不能对类型 Test 中的非静态方法 f(Student[], String)进行静态引用:这个错误发生是因为试图在 main 方法(一个静态方法)内部调用 f 方法(一个非静态方法)而不创建一个 Test 类的实例。在 Java 中,静态方法可以直接调用其他静态方法,但如果想从静态方法中调用非静态方法,需要创建类的一个实例。
  • 类型 Test 中的方法 f(Student[], String)对于参数(Student[], int)不适用:这个错误是因为尝试传递一个 int 类型的参数给一个期望 String 类型参数的方法。在的 f 方法中,第二个参数应该是一个 String 类型的学生ID,但从 main 方法传入的是一个 int 类型的值。


要解决这些问题,可以:

  • 将 f 方法改为静态的,这样就可以从 main 方法中直接调用它,不需要创建 Test 类的实例。
  • 确保从 main 方法传递给 f 方法的第二个参数是一个字符串,这意味着它应该是学生的 ID,不是其他类型的数值。

此外,若想通过键盘录入来查找数组的索引,并找到想要的已经录入的信息。

确保使用正确的数据类型来接收用户输入,并正确处理这些数据来查找数组中的相应元素。

代码参考:
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // ... 省略其他部分的代码 ...

        System.out.println("请输入要查找的学生学号: ");
        String a = sc.next(); // 这里改为接收字符串输入

        int suoy = f(test, a); // 确保这里传递的是字符串类型的 ID

        // 这里可以添加代码来输出找到的信息或者处理找不到的情况
        if (suoy != -1) {
            // 输出找到的学生信息
        } else {
            // 未找到学生信息的处理
        }
    }

    // 将方法 f 改为静态的
    public static int f(Student[] test, String sid) {
        for (int i = 0; i < test.length; i++) {
            String id = test[i].getSid();
            if (id.equals(sid)) { // 这里应该用 .equals 方法来比较字符串
                return i;
            }
        }
        return -1;
    }
}
if 语句中使用 .equals 来比较字符串,而不是 ==,因为 == 在 Java 中比较的是对象引用,而不是字符串的内容。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-13 19:21:54 | 显示全部楼层
你的错误提示中提到了两个问题。

首先,不能对非静态方法进行静态引用。这是因为当一个方法被声明为静态时,它属于类而不是对象实例。而非静态方法是属于对象实例的,只有创建了对象实例后才能调用。所以,如果你想在静态方法中调用非静态方法,你需要先创建一个对象实例。

其次,方法f(Student, String)对于参数(Student, int)不适用。这是因为你所调用的方法f需要两个参数,一个是Student类型的对象,另一个是String类型的参数。然而,在你对f方法进行调用时,传递的第二个参数是一个整数类型(int)。这导致了方法签名的不匹配错误。

关于键盘输入和查找数组中的信息,你可以使用Java中的Scanner类来实现输入,然后使用遍历数组的方式查找特定的信息。下面是一个示例代码,演示了如何实现键盘输入和查找数组中的信息:
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 创建一个包含学生信息的数组
        Student[] students = {
                new Student("Tom", 18),
                new Student("Jerry", 20),
                new Student("Alice", 19)
        };

        System.out.print("请输入要查找的学生姓名:");
        String name = scanner.nextLine();

        // 遍历数组,查找匹配的学生信息
        boolean found = false;
        for (int i = 0; i < students.length; i++) {
            if (name.equals(students[i].getName())) {
                System.out.println("找到了!该学生的年龄是:" + students[i].getAge());
                found = true;
                break;
            }
        }

        if (!found) {
            System.out.println("没有找到匹配的学生信息。");
        }

        scanner.close();
    }
}

class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

在上面的示例代码中,我们使用Scanner类来获取键盘输入的学生姓名。然后,我们使用for循环遍历学生数组,查找与输入的姓名匹配的学生信息。如果找到了匹配的学生信息,则输出该学生的年龄;如果没有找到匹配的学生信息,则输出相应的提示消息。

希望这能帮到你!如果你有任何其他问题,请随时问我。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 20:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表