我的 java class 的调用方法

Calling methods for my java class

我正在尝试创建一种方法,询问用户他们想要的名称和值的数量,然后提示用户输入这些名称和值。然后假设 return 具有最低值的人的名字并在 main 中打印。不断弹出找不到变量 "name" 的错误。到目前为止,这是我的代码

public static void main(String[] args){
    String name = minValue();
    System.out.println(name);
}//end main

public static String minValue(){
    Scanner input = new Scanner(System.in);
    System.out.print("How many first names are there?");
    int numOfNames = input.nextInt();
    for(int number = 0; number < numOfNames; number++){
        System.out.print("Enter name: ");
        String name = input.next();
    }
    System.out.print("How many values are there?");
    int numOfValues = input.nextInt();
    for (int count = 0; count < numOfValues; count++){
        System.out.print("Enter the value: ");
        double value = input.nextDouble();
    }
    return name;
}//end minValue 

我还认为我在将值与名称相关联方面做得不对。真的很困惑。

在方法 minValue 中,您在第一个 for 循环中定义了 String name 变量,然后您试图在循环范围外访问它。你应该这样做:

public static String minValue(){

  ...
  String name = "";
  for( ... ) {
    name = input.next();
  }

  ...

  return name;
}

Error keeps popping up that it cannot find the variable "name".

name 移出 for 循环:

String name = null;
for (int number = 0; number < numOfNames; number++) {
    System.out.print("Enter name: ");
    name = input.next();
}

解释:

for 循环的大括号({})定义了变量定义的范围。由于您在该块内定义了 name ,因此它只能在其中可用。通过将块外的声明移动到 return name 的范围内,它将可供引用。

It's suppose to return the first name of the person with the lowest value and print in main.

如果您想记住您阅读的名称和值,您必须将它们全部放入某种数据结构(数组、列表、映射等)中。我假设您正在尝试使用最基本的结构,因此请使用数组。此外,在您的案例中使用不同数量的名称和值是没有意义的。尝试理解并完成这段代码:

public static String minValue() {

    Scanner input = new Scanner(System.in);

    System.out.print("How many first names are there?");
    int numOfNames = input.nextInt();
    String[] names = new String[numOfNames];
    double[] values = new double[numOfNames];
    for (int number = 0; number < numOfNames; number++) {
        System.out.print("Enter name: ");
        names[number] = input.next();
        System.out.print("Enter the value: ");
        values[number] = input.nextDouble();
    }

    int i = 0;
    // write a way to get the index i of the smallest value in values

    return names[i];
}

您在方法的末尾执行了 return name,但您没有在正确范围内的任何地方声明它。您已经在 main 中定义了它(这意味着它仅在该方法中可用)和 for 循环中(这意味着它为每个循环迭代重新创建并且仅在该处可用)。

您可以在 minValue 方法的开头添加 String name = "" 作为快速修复,但我建议您阅读变量范围,以便了解您的代码不正确的原因。

这应该return给你起个名字。 您所做的是在 for 循环中定义名称。这意味着一旦 for 循环 运行 完成,名称变量就会被丢弃。 定义您希望 return 的变量或在循环外使用循环外(如在方法的开头。 这应该可以 return 命名给你。

public static void main(String[] args){
  String name = minValue();
  System.out.println(name);
}//end main

public static String minValue(){
  String name="none";
  Scanner input = new Scanner(System.in);
  System.out.print("How many first names are there?");
  int numOfNames = input.nextInt();
for(int number = 0; number < numOfNames; number++){
  System.out.print("Enter name: ");
  name = input.next();
}
  System.out.print("How many values are there?");
  int numOfValues = input.nextInt();
for (int count = 0; count < numOfValues; count++){
   System.out.print("Enter the value: ");
   double value = input.nextDouble();
 }
 return name;
}//end minValue 

此外,这段代码对 double 值完全没有任何作用...

  System.out.print("How many values are there?");
  int numOfValues = input.nextInt();
for (int count = 0; count < numOfValues; count++){
   System.out.print("Enter the value: ");
   double value = input.nextDouble();
 }

改用这段代码!它可以帮助您将值存储在数组中并将代码写入 space 提供的最小值!

Scanner input = new Scanner(System.in);
        System.out.print("How many first names are there?");
        int numOfNames = input.nextInt();
        String name[]=new String[numOfNames];
        for (int number = 0; number < numOfNames; number++) {
            System.out.print("Enter name: ");
             name[number] = input.next();
        }
        System.out.print("How many values are there?");
        int numOfValues = input.nextInt();
        double value[]=new double[numOfValues];
        for (int count = 0; count < numOfValues; count++) {
            System.out.print("Enter the value: ");
            value[count] = input.nextDouble();
        }
        /* Write function to calculate min value here */
        return min value;