莆仙生活网
当前位置: 莆仙生活网 > 知识库 >

vvint

时间:2024-03-27 13:30:47 编辑:莆仙君

java中数组是怎么作为函数参数进行传递的

举个例子和你说。
传递数组参数:
1. 传递数组
要传递数组到方法里,只要指明传入的参数是一个数组即可。
例:
public class ArrayDemo //定义主类
{
public static void main(String args[])
{
int a[]={8,23,7,6,9,23}; //定义一维数组
ArrayDemo min=new ArrayDemo (); //创建对象
min.arrayMin(a); //将一维数组a传入least()方法
}
public void arrayMin(int array[]) //参数array[]接受一维整形数组
{
int temp=array[0];
for(int i=0;i<array.length;i++)
if(temp>array[i])
temp=array[i];
System.out.println("最小的数为:"+temp);
}
}
从该例中可以看出,如果要将数组传递到方法里,只需在方法名后的括号内写上数组的名即可。二维数组的传递与一维数组相似,在需在方法里声明传入的参数是一个二维数组。


java中 数组可以作为形式参数传递到调用的方法中吗?要怎么操作?

可以,操作代码如下:public class ArrTest{public static void doTest(String[] args){for(int i=0;i<args.length;i++){System.out.println(args[i]);}}public static void main(String[] args){String[] testArr = {"a","b","c","d"};ArrTest.doTest(testArr );}}扩展资料:把数组作为参数传入一个方法,在该方法中对数组进行一些操作:如果仅仅是插入数据项等一般操作,那么该操作会影响到数组本身;反之,如调整数组大小、对数组赋值等操作,则对数组本身没有影响。例子:public class Tester {public static void counter(int count) {count = 2;}public static void changeA1(int[] ints) {int[] temp = { 4, 5, 6 };ints = temp;}public static void changeA2(int[] ints) {ints[0] = 4;ints[1] = 5;ints[2] = 6;}public static void main(String[] args) {// Output: 1// 基本数据类型没有改变。int count = 1;counter(count);System.out.println("count: " + count);int[] ints = { 1, 2, 3 };// Output: 1, 2, 3// 对数组赋值,不会改变原始数组。changeA1(ints);for (int i = 0; i System.out.print(ints[i] + " ");}// Output: 4, 5, 6// 可以对数组插入新的数据项。System.out.println();changeA2(ints);for (int i = 0; i System.out.print(ints[i] + " ");}}}

c语言中,int是什么意思?

C/C++编程语言中,int表示整型变量,是一种数据类型,用于定义一个整型变量,在不同编译环境有不同的大小,不同编译运行环境大小不同。在32/64位系统中都是32位,范围为-2147483648~+2147483647,无符号情况下表示为0~4294967295。扩展资料matlab中int用于符号∫int(s)符号表达式s的不定积分.int(s,v)符号表达式s关于变量v的不定积分.int(s,a,b)符号表达式s的定积分, a,b分别为积分的下限和上限.int(s,v,a,b)符号表达式s关于变量v从 a到b的定积分.当int求不出符号解,会自动转求数值解。参考资料int函数_百度百科

java中,数组传入函数中后,再使用new,是否改变数组值呢?

Java中有种数据类型叫:引用类型。
这个数组就是引用类型。实际上 要用new什么什么来创建的都是引用类型。
什么是引用类型呢?
举例来说:你new一个{1,2,3}数组,在计算机内存中实际上是这样操作的。

首先内存中会生成一个叫intArray的变量,并且在另一块内存中生成一个{1,2,3}数组。

然后把这个数组的内存地址值赋值给这个intArray的变量。所以说你传入函数的值只是那个数组的地址。

那这么做所出现的特性可以这么解释:

假如你在中国的南方海边(地址)建了一个叫广州(intArray)的城市, 后来你把它改名叫上海(arrays)并交给另一个人(change())打理,但他就觉得这个城市不配叫这个名字,于是他就在中国的东部临海(地址)新建了一座城市(new int[]),并把上海这个名字给了这个城市。

于是广州该多大就多大,就没在他手里改变过。他去了上海,所以广州是没变化的(所以显示的还是1,2,3)。

但如果他没有去东部新建上海这个城市,而是按你的要求把广州叫成上海来管理,使得广州的面积扩大了几十万平米(aArray[0]=7)。那么这个南方海边的城市就是实实在在的有了改变啦(显示成了7,2,3)。

就是说地址就是在那里,不管你换成什么名字,只要是在那个地址上的城市,它都是一个样的。

ps :
如果你直接打印这个数组变量的话,会打印出一串字符串,
像这样:“xx@xxx”

其中@符号前面的是这个实例的类型,@后面的是实例的内存地址的哈希值(你就把它当做是实例的地址吧,以后你学的更深的时候就会明白了)


在java中如何在一个类中改变另一个类(在另一个包中)中的数组原始值?

楼主,你这个问题需要理解两个概念:
1、类的实例
2、访问域
一个类如下:
public class Test{
public static int a=10;
publicint b=20;
}

一个类要被使用,就必须有实例。
Test t1=new Test();
new Test()为t1这个引用在内存里面划分了一块空间出来,专门用来保存这个类的信息。
于是我们可以使用t1.b,它的值为20。
如果我们操作t1.b=30,那么t1这个实例里的b就改变为了30。
再写一行
Test t2=new Test();
new Test()的引用为t2。则t2.b的值为20,而非30,因为t1和t2的内存空间是独立的,相互不会影响。
同样我们对t2.b=40,也不会影响到t1.b的值。

那么a的值呢?
t1.a=30会是什么结果?
结果是t2.a也会为30。
如果你使用的是eclipse,那么在t1.a下面会出现一个黄线。
这是说明,使用方法不标准

事实上你用Test.a就可以了。
我们可以看到,a前面有static这个标签,这是说明a是一个静态的给所有Test实例用的变量。
既是说,它既不属于t1这个引用所指向的内存,也不属于t2。
它属于一个单独的为Test所用的static内存区域。

回到楼主的问题
1、访问域来说,你需要有办法访问到另一个类的数据,即是说,那个类的数据为public,或者提供了修改它的public方法(setXXX)
2、如果该值为static的,则你只需要调用 类名.属性名=你期望的值,就可以修改
3、如果该值不为static,则你只能修改它的某个实例的这个属性的值。


编程语言是什么?怎么学编程语言?

看你怎么学!如果自学,只能养成好的学习习惯慢慢学,日积月累,终能学有所成的!不过自制力不好的人不建议自学。如果要上培训机构学,建议:课前预习对于初学者来说尤其是零基础的同学,既然已经比那些有基础的同学差了一截,那么为什么不更加的努力去学呢?课前都会有课件或者书籍提前给到同学,可以自己利用课余时间预习一下,在预习的过程中肯定还会有自己解决不了的问题,先记录下来课上解决就好。2.课上认真听课在上课的时候讲师肯定不可能照顾到所有的同学,但是在讲课的时候每讲完一个知识点肯定会问到一个问题“都听懂了吗?”,想一下是不是你经历过的所有老师都有这个习惯?这个时候如果你有问题或者没听懂一定要及时去问,千万不要不懂装懂,否则后面你就会发现问题越来越多。3.课下项目复习课上讲过的东西不能光看会就够了,一定要自己亲自上手去实操一下看看,只有自己做的时候才知道到底学到什么程度,还有哪里没有掌握。4.记笔记好记性不如烂笔头,当你遇到解决不了的问题,自己可以找一个笔记本记录下来,课上老师讲的东西感觉不是很明白也要记下来,没事翻看一下避免以后再犯同样的错。5.不用慌张对于零基础的初学者刚开始学习的时候都会遇到听不懂听不明白的现象,因为确实你的基础水平很低,但是不要害怕听不懂是能理解的,就怕你听不懂之后就不认真学习了,主要你坚持学下去你会发现后面的知识学起来超级简单,就跟0到1和1到100的概念是一样的。

delphi在注册表写入数值的问题?,大家来看看

var
reg: TRegistry;
typ: TRegDataType;
str: string;
i: integer;
vv: integer;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_CURRENT_USER;
reg.OpenKey('caokun', True);
typ := reg.GetDataType('no');
i := reg.GetDataSize('no');
case typ of
rdstring:
str := '字符串';
rdInteger:
str := '整数';
rdBinary:
str := '二进制';
else
str := '未知类型';
end;
Memo1.Lines.Add(str);
Memo1.Lines.Add(inttostr(i));
edit1.text:=inttostr( reg.ReadBinaryData('no', vv, i));


c++中push_back容器,求解释下这段代码具体什么意思

如果我没有理解错误的话,3和4行实现了同样的操作,就是把name这个字符串放到attrNameArray这个容器里面,然后吧这个容器放到m_clAttrNameArray。如果写这个代码的人是使用过STL库的,那么我可以推断push_back是在容器的最后放入元素。这个方法来自于vector这个容器。示例代码如下:/*Author: qcqDate: 2015/5/12E-mail: [email protected]*/#include#includeusing namespace std;int main(){vector data;for (int i = 0; i ::iterator temp = data.begin(); temp != data.end(); temp++){cout << *temp << endl;}return 0;}


编程题编写一个函数,把一个字符串中的字母全改为大写字母,再全改为小写字母。

函数的定义:
char upchange(char in);
函数的实现
char upchange(char in)
{
return (char)(int(in)+32);//小写字母的ascii码等于大写的加32
}
主函数中的调用
char inp[200];
scanf("%s", inp);

int len=strlen(inp);
for (int i=0;i<len;i++)
{
if ((int(inp[i]) >= 65)&&(int(inp[i]) <= 90)) //因为大写字母的ascii码在65和90之间
inp[i]=upchange(inp[i]);
}

printf("%s\n", inp);


输入一个字符串,将其中的大写字母改为小写字母,小写字母改为大写字母,然后输出!

汇编???
DATA SEGMENT
ANY DB 22
DB 10
DB 20 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET ANY
ADD BX,2
CALL INPUT
CALL _TEST
CALL SHOW
MOV AH,4CH
INT 21H

SHOW PROC
MOV CX,10
PUSH BX
L1: MOV AH,2
MOV DL,BYTE PTR [BX]
INT 21H
INC BX
LOOP L1
POP BX
RET
SHOW ENDP
INPUT PROC
PUSH BX
MOV AH,10
LEA DX,ANY
INT 21H
POP BX
RET
INPUT ENDP
_TEST PROC
PUSH BX
MOV CX,10
LS: CMP BYTE PTR [BX],'a'
JB LL
LB: CMP BYTE PTR [BX],'z'
JA EXIT
SUB BYTE PTR [BX],20H
INC BX
LOOP LS
JMP EXIT1
LL: CMP BYTE PTR [BX],'Z'
JA EXIT
CMP BYTE PTR [BX],'A'
JB EXIT
ADD BYTE PTR [BX],20H
INC BX
LOOP LS
JMP EXIT1
EXIT: MOV BYTE PTR [BX],' '
INC BX
LOOP LS
EXIT1: POP BX
RET
_TEST ENDP
CODE ENDS
END START


将两个数组 排列组合到一个数组集合 求java 代码

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;


public class Test {

private String[] arr1;
private String[] arr2;

public Test(){
//数组长度可以随意改,但必须保证两个数组长度一样
arr1 = new String[3];
arr2 = new String[3];
initArray();
}

private void initArray(){
Scanner scanner = new Scanner(System.in);
for(int i=0;i<arr1.length;i++){
arr1[i] = scanner.next();
}
for(int i=0;i<arr2.length;i++){
arr2[i] = scanner.next();
}
}
/**
* 获取组合后的数组表单
* @return
*/
private List getcombineList(){
List list = new ArrayList();
combineArray(list, arr1, arr2);
combineArray(list, arr2, arr1);
return list;
}
/**
* 遍历数组str1,并将其复制到新的数组,再将str2中索引值与str1中索引值
* 相同的元素放入新的数组,然后将新的数组放入list中
* @param list
* @param str1
* @param str2
*/
private void combineArray(List list,String[] str1, String[] str2){
for(int i=0; i<str1.length; i++){
String[] str = new String[str1.length];
for(int j=0; j<str2.length; j++){
str[j] = str2[j];
if(i == j)
str[j] = str1[j];
}
System.out.println(getArrayMessage(str));
list.add(str);
}
}

/**
* 将数组每一个元素组合成字符串
* @param str 字符串数组
* @return 组合字符串
*/
private String getArrayMessage(String[] str){
StringBuffer buffer = new StringBuffer();
for(int i=0; i<str.length; i++){
if(i == str.length-1)
buffer.append(str[i]);
else
buffer.append(str[i]).append(",");
}
return buffer.toString();
}

public static void main(String[] argv){
Test test = new Test();
test.getcombineList();
}
}


Java数组分成N个数组的所有组合

这个问题不是这么想的,
你可以想象一个n位二进制的数,找出所有只有k个1,其他位都是0的数,这个二进制数的第x位为1就表示取字母表中的第x个字母,为0不取,最后得到的就是这个二进制数代表的组合,将所有的二进制数都翻译成字母组合后,就是你要取得的所有字母组合了。

如果实在不会的话,待会再给你写个代码

public class Combination {
public static void main(String[] args) {
String[] valueSets = { "a", "b", "c", "d", "e" };
int n = 3;
List list = combination(valueSets, n);
System.out.println(list);
for(String string: list){
System.out.println(string);
}
System.out.println("一共 "+list.size()+" 个。");
}

public static List combination(String[] valueSets, int n) {
System.out.println(">>>>>combination");
List binaryList = searchBinaryList(valueSets.length, n);
List combinationList = toCombinationList(binaryList, valueSets);
return combinationList;
}

public static List toCombinationList(List binaryList,
String[] valueSets) {
List combinationList = new ArrayList();
for (String binary : binaryList) {
String combination = changeBinaryToCombination(binary, valueSets);
if (combination != null && combination.trim() != "") {
combinationList.add(combination);
}
}
return combinationList;
}

public static String changeBinaryToCombination(String binary,
String[] valueSets) {
String combination = "";
if (binary == null || binary.trim() == "") {
return null;
}
for (int i = 0; i < binary.length(); i++) {
if (binary.charAt(i) == '1') {
combination += valueSets[i];
}
}
return combination;
}

public static List searchBinaryList(int length, int n) {
System.out.println(">>>>>searchBinaryList");
List binaryList = new ArrayList();
for (int i = 0; i < (int) Math.pow(2, length); i++) {
String binary = Integer.toBinaryString(i);
int count = oneCountsContainsInBinary(binary);
if (count == n) {
binaryList.add(toSpecifiedBitsBinary(binary, length));
}
}
return binaryList;
}

public static String toSpecifiedBitsBinary(String binary, int length) {
String specifiedBitsBinary = "";
for (int i = 0; i < length - binary.length(); i++) {
specifiedBitsBinary += 0;
}
specifiedBitsBinary += binary;
return specifiedBitsBinary;
}

public static int oneCountsContainsInBinary(String binary) {
int count = 0;
if (binary == null || binary.trim() == "") {
return count;
}
for (int i = 0; i < binary.length(); i++) {
if (binary.charAt(i) == '1') {
count++;
}
}
return count;
}
}


c语言高手帮帮忙!!谢谢!! 实训题3:编写程序,编写一个函数输出如下图形,

#include

void Print(int n)
{
for ( int i = 0; i < n; ++i )
printf("*");
printf("\n");
}

void PrintAngi(int n, int flag)
{
int i;
if ( flag )
for ( i = 0; i <= n; ++i )
Print(i);
else
for ( i = n; i >0; --i )
Print(i);
}

void main()
{
PrintAngi(10,1);
PrintAngi(10,0);
}


c语言中用函数做参数怎么用

数组元素就是下标变量,它与普通变量并无区别。 因此它作为函数实参使用与普通变量是完全相同的,在发生函数调用时,把作为实参的数组元素的值传送给形参,实现单向的值传送。【例5-4】说明了这种情况。

【例8-7】判别一个整数数组中各元素的值,若大于0 则输出该值,若小于等于0则输出0值。编程如下:#include void nzp(int v){ if(v>0) printf("%d ",v); else printf("%d ",0);}int main(void){ int a[5],i; printf("input 5 numbers\n"); for(i=0;i<5;i++){ scanf("%d",&a[i]); nzp(a[i]); } return 0;}
本程序中首先定义一个无返回值函数nzp,并说明其形参v为整型变量。在函数体中根据v值输出相应的结果。在main函数中用一个for语句输入数组各元素,每输入一个就以该元素作实参调用一次nzp函数,即把a[i]的值传送给形参v,供nzp函数使用。

数组名作为函数参数
用数组名作函数参数与用数组元素作实参有几点不同。

1) 用数组元素作实参时,只要数组类型和函数的形参变量的类型一致,那么作为下标变量的数组元素的类型也和函数形参变量的类型是一致的。因此,并不要求函数的形参也是下标变量。换句话说,对数组元素的处理是按普通变量对待的。用数组名作函数参数时,则要求形参和相对应的实参都必须是类型相同的数组,都必须有明确的数组说明。当形参和实参二者不一致时,即会发生错误。

2) 在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。在函数调用时发生的值传送是把实参变量的值赋予形参变量。在用数组名作函数参数时,不是进行值的传送,即不是把实参数组的每一个元素的值都赋予形参数组的各个元素。因为实际上形参数组并不存在,编译系统不为形参数组分配内存。那么,数据的传送是如何实现的呢?在我们曾介绍过,数组名就是数组的首地址。因此在数组名作函数参数时所进行的传送只是地址的传送,也就是说把实参数组的首地址赋予形参数组名。形参数组名取得该首地址之后,也就等于有了实在的数组。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。


上图说明了这种情形。图中设a为实参数组,类型为整型。a占有以2000为首地址的一块内存区。b为形参数组名。当发生函数调用时,进行地址传送,把实参数组a的首地址传送给形参数组名b,于是b也取得该地址2000。于是a,b两数组共同占有以2000为首地址的一段连续内存单元。从图中还可以看出a和b下标相同的元素实际上也占相同的两个内存单元(整型数组每个元素占二字节)。例如a[0]和b[0]都占用2000和2001单元,当然a[0]等于b[0]。类推则有a[i]等于b[i]。

【例8-8】数组a中存放了一个学生5门课程的成绩,求平均成绩。#include float aver(float a[5]){ int i; float av,s=a[0]; for(i=1;i<5;i++) s=s+a[i]; av=s/5; return av;}int main(void){ float sco[5],av; int i; printf("\ninput 5 scores:\n"); for(i=0;i<5;i++) scanf("%f",&sco[i]); av=aver(sco); printf("average score is %5.2f",av); return 0;}
本程序首先定义了一个实型函数aver,有一个形参为实型数组a,长度为5。在函数aver中,把各元素值相加求出平均值,返回给主函数。主函数main 中首先完成数组sco的输入,然后以sco作为实参调用aver函数,函数返回值送av,最后输出av值。 从运行情况可以看出,程序实现了所要求的功能。

3) 前面已经讨论过,在变量作函数参数时,所进行的值传送是单向的。即只能从实参传向形参,不能从形参传回实参。形参的初值和实参相同,而形参的值发生改变后,实参并不变化,两者的终值是不同的。而当用数组名作函数参数时,情况则不同。由于实际上形参和实参为同一数组,因此当形参数组发生变化时,实参数组也随之变化。当然这种情况不能理解为发生了“双向”的值传递。但从实际情况来看,调用函数之后实参数组的值将由于形参数组值的变化而变化。为了说明这种情况,把【例5.4】改为【例5.6】的形式。

【例8-9】题目同【例8.7】。改用数组名作函数参数。#include void nzp(int a[5]){ int i; printf("\nvalues of array a are:\n"); for(i=0;i<5;i++){ if(a[i]<0) a[i]=0; printf("%d ",a[i]); }}int main(void){ int b[5],i; printf("\ninput 5 numbers:\n"); for(i=0;i<5;i++) scanf("%d",&b[i]); printf("initial values of array b are:\n"); for(i=0;i<5;i++) printf("%d ",b[i]); nzp(b); printf("\nlast values of array b are:\n"); for(i=0;i<5;i++) printf("%d ",b[i]); return 0;}
本程序中函数nzp的形参为整数组a,长度为5。主函数中实参数组b也为整型,长度也为5。在主函数中首先输入数组b的值,然后输出数组b的初始值。然后以数组名b为实参调用nzp函数。在nzp中,按要求把负值单元清0,并输出形参数组a的值。 返回主函数之后,再次输出数组b的值。从运行结果可以看出,数组b的初值和终值是不同的,数组b的终值和数组a是相同的。这说明实参形参为同一数组,它们的值同时得以改变。

用数组名作为函数参数时还应注意以下几点:
①形参数组和实参数组的类型必须一致,否则将引起错误。

②形参数组和实参数组的长度可以不相同,因为在调用时,只传送首地址而不检查形参数组的长度。当形参数组的长度与实参数组不一致时,虽不至于出现语法错误(编译能通过),但程序执行结果将与实际不符,这是应予以注意的。

【例8.10】如把例8.9修改如下:#include void nzp(int a[8]){ int i; printf("\nvalues of array aare:\n"); for(i=0;i<8;i++){ if(a[i]<0)a[i]=0; printf("%d ",a[i]); }}int main(void){ int b[5],i; printf("\ninput 5 numbers:\n"); for(i=0;i<5;i++) scanf("%d",&b[i]); printf("initial values of array b are:\n"); for(i=0;i<5;i++) printf("%d ",b[i]); nzp(b); printf("\nlast values of array b are:\n"); for(i=0;i<5;i++) printf("%d ",b[i]); return 0;}
本程序与【例8.9】程序比,nzp函数的形参数组长度改为8,函数体中,for语句的循环条件也改为i<8。因此,形参数组a和实参数组b的长度不一致。编译能够通过,但从结果看,数组a的元素a[5]、a[6]、a[7]显然是无意义的。

③在函数形参表中,允许不给出形参数组的长度,或用一个变量来表示数组元素的个数。例如,可以写为:
void nzp(int a[])
或写为
void nzp( int a[], int n )
其中形参数组a没有给出长度,而由n值动态地表示数组的长度。n的值由主调函数的实参进行传送。由此,【例8-10】又可改为【例8-11】的形式。

【例8-11】复制纯文本新窗口
#include void nzp(int a[],int n){ int i; printf("\nvalues of array a are:\n"); for(i=0;i<n;i++){ if(a[i]<0) a[i]=0; printf("%d ",a[i]); }}int main(void){ int b[5],i; printf("\ninput 5 numbers:\n"); for(i=0;i<5;i++) scanf("%d",&b[i]); printf("initial values of array b are:\n"); for(i=0;i<5;i++) printf("%d ",b[i]); nzp(b,5); printf("\nlast values of array b are:\n"); for(i=0;i<5;i++) printf("%d ",b[i]); return 0;}