鱼C论坛

 找回密码
 立即注册
查看: 82|回复: 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,不是其他类型的数值。

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

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

代码参考:

  1. import java.util.Scanner;

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

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

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

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

  16.     // 将方法 f 改为静态的
  17.     public static int f(Student[] test, String sid) {
  18.         for (int i = 0; i < test.length; i++) {
  19.             String id = test[i].getSid();
  20.             if (id.equals(sid)) { // 这里应该用 .equals 方法来比较字符串
  21.                 return i;
  22.             }
  23.         }
  24.         return -1;
  25.     }
  26. }
复制代码

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,不是其他类型的数值。

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

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

代码参考:

  1. import java.util.Scanner;

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

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

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

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

  16.     // 将方法 f 改为静态的
  17.     public static int f(Student[] test, String sid) {
  18.         for (int i = 0; i < test.length; i++) {
  19.             String id = test[i].getSid();
  20.             if (id.equals(sid)) { // 这里应该用 .equals 方法来比较字符串
  21.                 return i;
  22.             }
  23.         }
  24.         return -1;
  25.     }
  26. }
复制代码

if 语句中使用 .equals 来比较字符串,而不是 ==,因为 == 在 Java 中比较的是对象引用,而不是字符串的内容。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

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

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

  1. import java.util.Scanner;

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

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

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

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

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

  25.         scanner.close();
  26.     }
  27. }

  28. class Student {
  29.     private String name;
  30.     private int age;

  31.     public Student(String name, int age) {
  32.         this.name = name;
  33.         this.age = age;
  34.     }

  35.     public String getName() {
  36.         return name;
  37.     }

  38.     public int getAge() {
  39.         return age;
  40.     }
  41. }
复制代码


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

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 01:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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