2

疑似コードを投稿します。ご理解いただければ幸いです。

import java.util*.;

メインメソッド {

サブメソッド1();

submethod1() {

 Screen input = new Scanner(System.in);
 int buy = input.nextInt();

  if( buy != 0) {
     submethod2();
    }

 submethod2() {
 Screen input = new Scanner(System.in);
 int[][]grid = new int [5][6]
 int row = input.nextInt();
 int col = input.nextint();
 grid[row][col] = 1;

今回は行に 1、列に 1 を入力したとします。それからgrid[1][1] = 1。の値を保存してgrid[1][1]、次に行 2、列 2 を入力すると、次のようになります。

 grid[1][1] = 1;
 grid[2][2] = 1; and so on for whatever row-col combination I type.

最後に、submethod1 に戻りたいと思います。submethod1 に、grid[1][1] = 1 であり、grid[2][2] の値も 1 であることを理解してもらいたいです。等々....

4

3 に答える 3

0

以下では、プログラム呼び出しのさまざまなインスタンス間ではなく、プログラムのインスタンスでグリッドの値を保存することについて質問していると想定しています。さまざまなプログラム呼び出し間でグリッドの値を保存する場合は、グリッドの値をファイルなどに保存する必要があります。

submethod2()内に配列グリッドを作成する代わりに、それをクラス変数として作成し、submethod1()、submethod2()をメンバー関数として作成します。

mainメソッドでオブジェクトを作成し、オブジェクトでsubmethod1()を呼び出します

何かのようなもの

class ABC
{
int[][] grid = new int[5][6];

 submethod1()
{
...
}

 submethod2()
{
 ...
 }


public static void main(String args[])
{
  ABC abc = new ABC();
  abc.submethod1();
}

}
于 2012-09-26T11:31:37.947 に答える
0

これはスコーピングの問題です。基本的に、を呼び出すたびにint[][]呼び出される新しい変数を作成しています。クラス変数として保存するか、渡してから返し、自分で手動で更新します(このアプローチはお勧めしません)gridsubmethod2()submethod2()

これ以上のコンテキストがなければ、問題をオブジェクトに分解する方法を推奨するのは困難ですが、1 つの解決策は次のようなものになる可能性があります。

import java.util*.;

public class MainClass {
    private int[][] grid;

    public static void main(String[] args) {
        submethod1();
    }

    private void submethod1() {
        grid = new int[5][6];
        Screen input = new Scanner(System.in);
        int buy = input.nextInt();

        if( buy != 0) {
            submethod2();
        }
    }

    private void submethod2() {
        Screen input = new Scanner(System.in);
        int row = input.nextInt();
        int col = input.nextint();
        grid[row][col] = 1;
    }
}
于 2012-09-26T11:25:42.027 に答える
0

このような問題に対処する最善の方法は、オブジェクト指向アプローチを使用することです。これが、Java を使用する理由であることを忘れないでください。

、、、のGridItem3 つのプロパティを持つクラスをrow作成します。いくつかの値を保存すると、のオブジェクトが作成され、グローバル リストに保存されます。その後、任意の関数でそれを反復処理し、格納された値にアクセスできます。columnvalueGridItem

     class GridItem
    {
        int row;
        int column;
        int value;

        public GridItem(int row, int column, int value)
        {
            this.row = row;
            this.column = column;
            this.value = value;
        }
        //Provide getters only
    }
    ArrayList<GridItem>items = new ArrayList<GridItem>();
    items.add(new GridItem(1, 1, 1));// 1 row 1 col 1 value
    items.add(new GridItem(2, 2, 2));// 2 row 2 col 2 value


    items.get(0).getRow()// get first 

他にもいくつかの解決策があります。例: グローバル配列を維持してから展開します。グリッドなどのリストを作成しますが、それらはすべて複雑で必要以上のことを行います。

于 2012-09-26T11:45:57.237 に答える