2013-02-22 4 views
-1

(для класса Java начинающего) Назначение указывает, что я делаю только один экземпляр сканера, и мне это нужно более чем одним методом, поэтому я объявил его вне основного. Я объявляю массив и пытаюсь приравнять его к вызову метода initialCash(), как и в Python. Проблема в том, что я делаю метод initialCash статическим, я не могу использовать Scanner. Если initialCash() не является статическим, Eclipse достаточно любезен, чтобы сказать мне, что он «не может статически ссылаться на нестатический метод». (в money = initialCash(); line) Как мне обойти это?Ошибка запуска статической Java-среды

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."); 
      } 
     } 

    } 


} 

ответ

3

Создайте экземпляр вашего класса и вызовите initialCash на этом экземпляре из основного.

money = new Project1().initialCash(); 
+2

+1 ... если у меня остались голоса. –

+0

@BrianRoach no problomo. мои ежедневные 200 повторений уже превысили. на самом деле не имеет значения .. хе-хе .. спасибо .. :) – PermGenError

+0

спасибо большое, я, очевидно, все еще привык к объектно-ориентированной вещи – user1880866

0

Что сказал PermGenError, безусловно, работать, или вы могли бы сделать как метод initalCash() и опорный сканер переменной статичной.

0

В коде, линия

Scanner scanner = new Scanner(System.in);

создает новый Scanner объект каждый раз, когда вы создаете объект типа Project1. В то время как если бы вы написали это как

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

Это создало бы один экземпляр Scanner для использования всех классов, которые относятся к этому объекту. В вашем вопросе вы упомянули, что должен быть ровно один объект сканера, если это так.

Если вы используете

money = new Project1().initialCash();

вы создаете новый Project1 объект, а также новый объект сканера, если вы повторно использовать Scanner объект, вызывая другую функцию, которую вы не можете, как это связано с этот конкретный экземпляр Project1, поэтому я бы порекомендовал вам сделать его static, то же самое с функцией initialCash, он привязан к этому экземпляру объекта.