NEOrdbok 发表于 2024-4-13 19:21:23

Java键盘输入即查找信息



错误提示:
此行的多个标记
        - 不能对类型 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.getSid();
            if (id.equals(sid)) { // 这里应该用 .equals 方法来比较字符串
                return i;
            }
      }
      return -1;
    }
}
if 语句中使用 .equals 来比较字符串,而不是 ==,因为 == 在 Java 中比较的是对象引用,而不是字符串的内容。

FishC 发表于 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.getName())) {
                System.out.println("找到了!该学生的年龄是:" + students.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 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: Java键盘输入即查找信息