-1

(对于初学者 Java 类)作业指定我只创建一个 Scanner 实例,并且我需要在多个方法中使用它,所以我在 main 之外声明了它。我声明了一个数组并尝试将其与方法调用 initialCash() 等同起来,就像我在 Python 中所做的那样。问题是如果我将 initialCash 方法设为静态,我就不能使用 Scanner。如果 initialCash() 不是静态的,Eclipse 会告诉我它“不能对非静态方法进行静态引用”。(in the money = initialCash(); line)我该如何解决这个问题?

package proj1;

import java.util.Scanner;

public class Project1 
{
    Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) 
    {
        int[] money = new int[4]; 
        money = initialCash();

    }   
    public int[] initialCash()
    {
        int[] initialMoney = new int[4];

        while(true)
        {
            System.out.print("Ones: ");
            initialMoney[0] = scanner.nextInt();
            System.out.print("Fives: ");
            initialMoney[1] = scanner.nextInt();
            System.out.print("Tens: ");
            initialMoney[2] = scanner.nextInt();
            System.out.print("Twenties: ");
            initialMoney[3] = scanner.nextInt();

            if((initialMoney[0]>=0)&&(initialMoney[1]>=0)&&(initialMoney[2]>=0)&&(initialMoney[3]>0))    
            {
                return initialMoney;
            }
            else
            {
                System.out.println("One or more invalid denominations. Try again.");
            }
        }

    }


}
4

4 回答 4

3

创建您的类的一个实例并从 main 调用该实例上的 initialCash。

money = new Project1().initialCash();
于 2013-02-22T20:53:25.467 回答
0

PermGenError 所说的肯定会起作用,或者您可以将 initalCash() 方法和扫描仪引用变量都设为静态。

于 2017-07-31T21:01:05.230 回答
0

在您的代码中,该行

Scanner scanner = new Scanner(System.in);

每次创建类型的对象时都会创建一个新Scanner对象Project1。而如果你把它写成

static Scanner scanner = new Scanner(System.in);

它将创建一个Scanner实例供所有引用该对象的类使用。在您提到的问题中,必须只有一个 Scanner 对象,如果是这样,这就是要走的路。

如果你使用

money = new Project1().initialCash();

您正在创建一个新Project1对象以及一个新的 Scanner 对象,如果您要Scanner通过调用另一个函数来重用该对象,那么您不能因为它与 的特定实例相关联Project1,所以我建议您制作它static,与initialCash函数,它与该对象实例相关联。

于 2017-08-08T01:31:29.603 回答
0

将 Scanner 和 initialMoney 方法设为静态。这应该可以解决您的问题。

static Scanner scanner = new Scanner(System.in);

public static void main(String[] args)
{
    int[] money = new int[4];
    money = initialCash();

}
public static int[] initialCash()
{
    int[] initialMoney = new int[4];

    while(true)
    {
        System.out.print("Ones: ");
        initialMoney[0] = scanner.nextInt();
        System.out.print("Fives: ");
        initialMoney[1] = scanner.nextInt();
        System.out.print("Tens: ");
        initialMoney[2] = scanner.nextInt();
        System.out.print("Twenties: ");
        initialMoney[3] = scanner.nextInt();

        if((initialMoney[0]>=0)&&(initialMoney[1]>=0)&&(initialMoney[2]>=0)&&(initialMoney[3]>0))
        {
            return initialMoney;
        }
        else
        {
            System.out.println("One or more invalid denominations. Try again.");
        }
    }

}
于 2019-08-10T04:41:37.320 回答