理论:关于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-是的,您可以。啊,是的,我在处理下一个赋值时意识到了。类变量完全不需要。谢谢谢谢你的帮助!没问题!你在哪学期上大学?