0

新しいメソッドを作成しようとしましたが、実行中にこれが配置されたコードが機能しません

class Matrix {
    public static void main (String  args[]) throws IOException {
        ...
        System.out.println("Enter q-ty of matrix elements i= ");
        int gormatelement = 0;
        getchartoint (gormatelement);
        ...
    }
    ...
}

そしてメソッドの後

public static void getchartoint (int a) throws IOException{
    BufferedReader bReader = new BufferedReader (new InputStreamReader(System.in));
    String k = bReader.readLine();
    a =  Integer.parseInt(k);
}

このコードは、コンソールから char を取得し、それを int に変換する必要があります - 行列の要素の q-ty として使用されます

4

4 に答える 4

2

メソッド内で単純なパラメーター変数 (a など) の値を変更しても、メソッドを呼び出したときに指定した変数 (gormatelement など) は変更されません。

これを行う最も簡単な方法は、メソッドが整数値を返し、呼び出しコードがそれを格納するようにすることです。

int gormatelement = getchartoint ();

public static int getchartoint () throws IOException{
   int a;
   ... same code ...
   return a;
}

エキスパンド

変数を渡すというこの概念について詳しく調べたい場合は、「値による呼び出し」および「参照による呼び出し」という用語を Google で検索できます。

Java は「値による呼び出し」を使用しますが、インスタンス変数が含まれているオブジェクトがメソッドに渡されると混乱しやすくなります。これは、含まれているフィールド値が変更される可能性があり、変更がメソッドを呼び出したオブジェクトに伝播するように見えるためです。

何が起こっているかというと、Object の値は、いわばオブジェクトのコンテンツへの参照です。私が言いたいことを理解するには、しばらく考えてみる必要があります。

于 2013-01-30T18:46:41.310 に答える
1
public class x
{
public static void main(String[] args)
{
System.out.println("Enter q-ty of matrix elements i= ");
        int gormatelement = 0;
        getchartoint (gormatelement);
}

public static void getchartoint (int a) throws IOException{
            BufferedReader bReader = new BufferedReader (new 
                    InputStreamReader(System.in));
            String k = bReader.readLine();
                a =  Integer.parseInt(k);
            }
}

あなたは初心者なので、少なくともこれはプログラムをコンパイルするために必要です。

于 2013-01-30T18:48:37.767 に答える
0

parseInt() の結果を a に割り当てています。これは「gormatelement」のローカル コピーであり、関数が終了すると削除されます。Java は、プリミティブ データ型に「値による呼び出し」を使用します。

Scanner Classを見ることもできます:

public static int getIntFromCommandLine() {
    Scanner scan = new Scanner(System.in);
    return scan.nextInt();
}
于 2013-01-30T18:49:16.020 に答える
-1

試す

int gormatelement = YourClass.getchartoint(0);
于 2013-01-30T18:48:01.360 に答える