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)的值时,它不会更改您在调用该方法时提供的变量(如 gormateelement)。

最简单的方法是让方法返回整数值和调用代码来存储它。

int gormatelement = getchartoint ();

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

展开

如果你想了解更多关于传递变量的概念,你可以谷歌“按值调用”和“按引用调用”这两个术语。

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,它是“gormateelement”的本​​地副本,一旦函数结束就会被删除。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 回答