(适用于初学Java类) 赋值指定我只生成一个Scanner实例,并且我需要多个方法,所以我在main之外声明它。我声明了一个数组,并尝试将它与方法调用,initialCash()等同,就像在Python中一样。问题是如果我使initialCash方法静态,我不能使用扫描仪。如果initialCash()不是静态的,那么Eclipse很友好地告诉我它“无法对非静态方法进行静态引用”。 (在money = initialCash();行) 我该如何解决这个问题?
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.");
}
}
}
}
答案 0 :(得分:3)
创建一个类的实例,并从main调用该实例上的initialCash。
money = new Project1().initialCash();
答案 1 :(得分:0)
PermGenError所说的肯定会有效,或者你可以将initalCash()方法和扫描仪引用变量都设置为静态。
答案 2 :(得分: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
对象,因为它与{的特定实例相关联{1}},所以我建议您将其设为Project1
,与static
函数相同,它与该对象实例相关联。
答案 3 :(得分:0)
使Scanner和initialMoney方法保持静态。这应该可以解决您的问题。
let countryObj = {
Argentina: 'buenos Aires',
Bolivia: 'Sucre',
Brazil: 'Brasilia',
Chile: 'Santiago',
Columbia: 'Bogotá',
Ecuador: 'Quito',
Guyana: 'Georgetown',
Paraguay: 'Asunción',
Peru: 'Lima',
Suriname: 'Paramaribo',
Uruguay: 'Montevideo',
Venezuela: 'Caracas'
}
let keys = Object.keys(countryObj); // returns an array of the keys (country names) in countryObj
let randomCountry = function() {
// returns a randomly chosen country from the keys array and writes
// ... the country to the <p> element in index.html
let currentCountry = keys[Math.floor(keys.length * Math.random())];
document.getElementById('p').innerHTML = currentCountry;
return currentCountry;
}
let currentCountry = randomCountry();
console.log(countryObj[currentCountry]);