Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理论:关于Java识别数组名及其值_Java - Fatal编程技术网

理论:关于Java识别数组名及其值

理论:关于Java识别数组名及其值,java,Java,我必须制作一个程序,能够根据带有数字的数组打印符号,数字与要打印的符号数量相对应 我让它工作;代码如下: class printChart { int[] values; void barChart(int[] values){ for (int i=0;i<values.length;i++){ int number = values[i]; for (int j=0;j<number;j++){ System.out.pr

我必须制作一个程序,能够根据带有数字的数组打印符号,数字与要打印的符号数量相对应

我让它工作;代码如下:

class printChart {
  int[] values;

  void barChart(int[] values){
    for (int i=0;i<values.length;i++){
      int number = values[i];
      for (int j=0;j<number;j++){
        System.out.print("*");
      }
      System.out.println();
    }
  }

  void demo(){
    barChart(new int[] {2,5,0,4,3});
  }
  public static void main(String[] args){
    new printChart().demo();
  }
}
类打印图表{
int[]值;
无效条形图(int[]值){

对于Java中的(inti=0;i,一切都是通过值传递的,知道值是什么也很重要

这种方法

void demo(){
    barChart(new int[] {2,5,0,4,3});
}
和这个一样

void demo(){
    int[] arr = new int[] {2,5,0,4,3};
    barChart(arr);
}
在第一个数组中,创建了具有2,5,0,4,3个值的新数组,其参考复制到条形图方法中的参数

在第二个数组中,创建了具有2,5,0,4,3个值的新数组,并将其引用复制到变量arr中。然后在条形图方法中将
arr
复制到参数
值中

这就是它的工作原理以及为什么条形图方法知道这些值


Łukasz的另一个好观点是,第二行在您的程序中不起任何作用,因此您可以更改:

class printChart {
  int[] values;

  void barChart(int[] values){
对此

class printChart {

  void barChart(int[] values){

我不太确定你的问题是什么,但让我告诉你你做了些什么

您已经实现了一个名为
void barChart(int[]value)

要运行此方法,必须向其传递一个一维整数值数组

现在是有趣的部分

您已经在代码行2中创建了一个类变量
int[]values;

另外,您已经在方法
void barChart(int[]value)
中创建了lokal变量“value” 您所做的工作称为遮蔽。方法“barChart()”仅使用调用时传递给它的lokal值。
您从未使用过该类变量一次,因此可以将其删除

现在,如果您想使用类变量,您可以:
a) 更改变量的名称(类或局部)

b) 在“barChart”方法中,编写一个
this.value
而不是value。这将确保您使用的是类变量而不是本地变量。

使用
new int[]{2,5,0,4,3}
创建数组的引用被传递给
barChart(int[]values)的
values
参数
方法。您知道
条形图
方法中的
数组与您在上面创建的变量
不同,对吗?krillgar,我不知道。这是我对Java内部工作方式感兴趣的方式,而不仅仅是键入内容。2之间的区别是什么?这个答案对于一个封闭的问题,您可能会有所帮助:您传递到barChart()中的参数是通过java生成的引用(因为它没有变量名)创建并存储在堆中的,并通过引用barChart()中的值应该执行的操作来创建和存储的,java虚拟机知道如何操纵您的参数。我想我更了解它,知道,谢谢!还值得一提的是,OP的第二行代码
int[]值;
是无用的,并且被方法参数所遮蔽。@Rob-那
int[]代码开头的值
类变量
,它实际上没有在程序中使用。如果参数和类变量同名,则在该函数内部,参数“wins”。如果您想在该函数中调用类变量,可以将其称为
this.values
@Rob-但冗余不是正确的词。当您调用条形图时,您有两个同名的自变量。@Rob-是的,您可以。啊,是的,我在处理下一个赋值时意识到了。类变量完全不需要。谢谢谢谢你的帮助!没问题!你在哪学期上大学?