1
import java.util.Scanner;

public class PayAndGoParking
{

    public static void main(String Args[])
    {
       int choice=0;
       int numCars=0;
       String Plates[]=new String[50];
       String ccNumbers[]=new String[50];
       Scanner b = new Scanner(System.in);


        choice = printMenu();
        if(choice==1) {
            numCars=addCars(Plates,ccNumbers,numCars,b);
        }

    }

    public static int printMenu()
    {
        Scanner s = new Scanner(System.in);
        int choice;

        System.out.println("Welcome to Park and Go Parking");
        System.out.println("Park from 6 - Midnight for a flat fee of $4.00");

        System.out.println("1. Register your vehicle");
        System.out.println("2. Verify vehicle registration");

        System.out.print("Hello enter a Selection: ");
        choice = s.nextInt();

        if(choice==1) {
            System.out.println("Register your vehicle");
        }
        else {
            System.out.println("Verify your registration");
        }

        return choice;
    }


   public static int addCars (String [] plates,String [ ] ccNumbers, int numCars, Scanner keyboard)
   {
        Scanner s = new Scanner(System.in);


        System.out.println("Enter your plate number: ");
        plates[numCars]=s.nextLine();

        System.out.println("Enter your Credit Card Number ($4.00 charge): ");
        ccNumbers[numCars]=s.nextLine();



        System.out.println("Thank you, your plate " +plates[numCars]+ " has been added to the lot");

        numCars++;


        return numCars;



    }

したがって、私がやりたいことのほとんどは、addCars メソッドでユーザーがプレート番号と ccNumber に入力したものを、main メソッドのプレートと ccNumber 配列に格納することです。私が何について話しているのかわからないように聞こえる場合は申し訳ありません。私はプログラミングが初めてで、学習中です。

4

2 に答える 2

3

GanGnaMStYleOverFlowErroR は、あなたが尋ねた直接の質問について語っていますが、問題を解決するためのはるかに優れたアプローチは、コードを少し修正することです。すべてをパラメーターとしてメソッドに渡す代わりに、それらをオブジェクト PayAndGoParking のプロパティとして設定できます。これにより、スコープを単一のメソッドだけでなく、クラス全体に変更することで直接アクセスできます。

一般に、すべてに「静的」をドロップして機能させることは避けたいと考えています。それは理由のある特別なキーワードです(そして、それは単にすべてを機能させるからではありません:)。以下のサンプル コードをチェックして、その方法を確認してください。ご不明な点がございましたら、お気軽にお問い合わせください。

import java.util.Scanner;
public class PayAndGoParking {
    private String Plates[];
    private String ccNumbers[];
    private int numCars;

    public static void main(String Args[])
    {
        PayAndGoParking park = new PayAndGoParking();
        //set the defaults
        park.Plates = new String[50];
        park.ccNumbers =new String[50];
        park.numCars=0;

        int choice = park.printMenu();

        if(choice==1)
            park.addCars();

        //since arrays start at 0, this will print out the first license and cc number added
        System.out.println(park.Plates[0]);
        System.out.println(park.ccNumbers[0]);
    }

    public int printMenu()
    {
        Scanner s = new Scanner(System.in);
        int choice;

        System.out.println("Welcome to Park and Go Parking");
        System.out.println("Park from 6 - Midnight for a flat fee of $4.00");

        System.out.println("1. Register your vehicle");
        System.out.println("2. Verify vehicle registration");

        System.out.print("Hello enter a Selection: ");
        choice = s.nextInt();

        if(choice==1)
            System.out.println("Register your vehicle");
        else
            System.out.println("Verify your registration");

        return choice;
    }

    public void addCars() {
        Scanner s = new Scanner(System.in);

        System.out.println("Enter your plate number: ");
        Plates[numCars]= s.nextLine();

        System.out.println("Enter your Credit Card Number ($4.00 charge): ");
        ccNumbers[numCars]= s.nextLine();

        System.out.println("Thank you, your plate " +Plates[numCars]+ " has been added to the lot");

        numCars++;
    }
}
于 2012-11-20T23:59:37.970 に答える
1
String Plates[]=new String[50];
   String ccNumbers[]=new String[50];

Plates および ccNumber 配列は、メソッド スコープのみに限定されたローカル変数 (メソッド変数)です。つまり、メインメソッドの外ではアクセスできません。それらを静的インスタンス変数にして、クラス内の任意の場所にアクセスします。

public class PayAndGoParking {
 static String Plates[]=new String[50];
 static  String ccNumbers[]=new String[50];
public static void main(String Args[]) {
 // code in your main
}
public static int addCars (String [] plates,String [ ] ccNumbers, int numCars, Scanner keyboard) { 
// you  can now access ccNumber and Plates array here.
}

変数のスコープ:

  1. 静的変数 - クラス自体が存続する限り存続します。
  2. インスタンス変数 - クラスのインスタンスが存続する限り存続します
  3. ローカル変数またはメソッド変数 - メソッド内に存在します。
  4. ブロック変数 - ブロック内でのみ存在します
于 2012-11-20T23:44:48.440 に答える