用java编写主函数中如何调用参数传递?
importjava.util.Scanner;publicclassJJArrangedNumbers{publicstaticvoidmain(Stringargs[...
import java.util.Scanner;
public class JJArrangedNumbers
{
public static void main(String args[])
{
Scanner scanner = new Scanner(System.in);
boolean repeatInput = true;
do
{
ArrangedNumbers arrangeNumbers = new ArrangedNumbers();
arrangeNumbers .getNumber();
arrangeNumbers .isNumber();
arrangeNumbers .compareNumber();
arrangeNumbers .outputNumber();
System.out.println("是否还要继续输入(y/n)?");
String yesInput = "y";
String noInput = "n";
String input = scanner.nextLine();
if (yesInput.equals(input))
{
repeatInput = true;
}
if (noInput.equals(input))
{
System.exit(0);
}
}
while (repeatInput);
}
}
class ArrangedNumbers
{
int[] arrayNumbers;
String character;
boolean isNumber = true;
StringBuffer stringbuffer = new StringBuffer();
public void getNumber()
{
/*
数组中的整数总数
*/
int count = 0;
while(isNumber)
{
System.out.println("请任意输入数字,以空格间隔,以回车结束!");
Scanner scanner = new Scanner(System.in);
character = scanner.nextLine();
}
String inputContent = stringbuffer.toString();
String[] numbers = inputContent.split("\\s+");
arrayNumbers = new int[numbers.length];
for (int i=0;i<numbers.length;i++)
{
int memoryNumbers;
memoryNumbers=Integer.parseInt(numbers[i]);
arrayNumbers[count] = new Integer(memoryNumbers).intValue();
count++;
}
}
public String isNumber(String character)
{
char[] figures = character.toCharArray();
for(int i=0;i<figures.length;i++)
{
if(!(figures[i]>='1' && figures[i]<='9') && figures[i]!=32 && figures[i]!='n' && figures[i]!='y')
{
isNumber = true;
break;
}
isNumber = false;
}
if(!isNumber)
{
stringbuffer.append(character);
}
return character;
}
public void compareNumber()
{
for (int i=0;i<arrayNumbers.length;i++)
{
for (int j=0;j<arrayNumbers.length-i-1;j++)
{
if(arrayNumbers[j]>arrayNumbers[j+1])
{
int temp;
temp = arrayNumbers[j];
arrayNumbers[j] = arrayNumbers[j+1];
arrayNumbers[j+1] = temp;
}
}
}
}
public void outputNumber()
{
System.out.println("按升序排序:");
for(int i=0;i<arrayNumbers.length;i++)
{
System.out.println(arrayNumbers[i]);
}
}
}
问题是:在main函数中如何调用isNumber中的参数? 展开
public class JJArrangedNumbers
{
public static void main(String args[])
{
Scanner scanner = new Scanner(System.in);
boolean repeatInput = true;
do
{
ArrangedNumbers arrangeNumbers = new ArrangedNumbers();
arrangeNumbers .getNumber();
arrangeNumbers .isNumber();
arrangeNumbers .compareNumber();
arrangeNumbers .outputNumber();
System.out.println("是否还要继续输入(y/n)?");
String yesInput = "y";
String noInput = "n";
String input = scanner.nextLine();
if (yesInput.equals(input))
{
repeatInput = true;
}
if (noInput.equals(input))
{
System.exit(0);
}
}
while (repeatInput);
}
}
class ArrangedNumbers
{
int[] arrayNumbers;
String character;
boolean isNumber = true;
StringBuffer stringbuffer = new StringBuffer();
public void getNumber()
{
/*
数组中的整数总数
*/
int count = 0;
while(isNumber)
{
System.out.println("请任意输入数字,以空格间隔,以回车结束!");
Scanner scanner = new Scanner(System.in);
character = scanner.nextLine();
}
String inputContent = stringbuffer.toString();
String[] numbers = inputContent.split("\\s+");
arrayNumbers = new int[numbers.length];
for (int i=0;i<numbers.length;i++)
{
int memoryNumbers;
memoryNumbers=Integer.parseInt(numbers[i]);
arrayNumbers[count] = new Integer(memoryNumbers).intValue();
count++;
}
}
public String isNumber(String character)
{
char[] figures = character.toCharArray();
for(int i=0;i<figures.length;i++)
{
if(!(figures[i]>='1' && figures[i]<='9') && figures[i]!=32 && figures[i]!='n' && figures[i]!='y')
{
isNumber = true;
break;
}
isNumber = false;
}
if(!isNumber)
{
stringbuffer.append(character);
}
return character;
}
public void compareNumber()
{
for (int i=0;i<arrayNumbers.length;i++)
{
for (int j=0;j<arrayNumbers.length-i-1;j++)
{
if(arrayNumbers[j]>arrayNumbers[j+1])
{
int temp;
temp = arrayNumbers[j];
arrayNumbers[j] = arrayNumbers[j+1];
arrayNumbers[j+1] = temp;
}
}
}
}
public void outputNumber()
{
System.out.println("按升序排序:");
for(int i=0;i<arrayNumbers.length;i++)
{
System.out.println(arrayNumbers[i]);
}
}
}
问题是:在main函数中如何调用isNumber中的参数? 展开
若以下回答无法解决问题,邀请你更新回答
展开全部
Java是种面向对象的语言,可以说,Java所有一切都是对象,这句话很好的描述的Java和别的面向对象的编程语言,例如Object Pascl的区别。而且,这个特性,也对函数的参数传递有着重要的影响。
用过dephi的人都知道,在object Pascal中,函数的参数传递有两种方式,值传递和变参传递,简单的说,就是加不加var的区别。加了var,就是变参传递,实质上传递的是这个参数的指针,也就是说,在函数中对参数的任何修改,实际上就是参数对应的变量的修改,这样程序执行完后,作为参数传进来的变量的值可能发生改变。而不加var,则就是值传递,实质上,就是将值先拷贝一份,然后,将拷贝的传递给函数,这样,修改实际上对原来的变量没有影响,(因为只是对拷贝的修改)而且,等到函数返回时,函数调用的空间退栈,拷贝的参数空间也被收回。
而Java来说,由于所有的皆是对象,所以,参数传递有所不同。其中,没有了var的区别。但实际上,由于对象作为参数,也就是相当于var式传递,因为,传递给函数的是原对象的指针,这样,对传入的参数的修改,实际上就是作为参数的对象的修改,在这一点上,Java的参数传递实际上和var方式很象。但在简单数据类型做参数上,Java却是遵循值传递的原则,即在函数中修改不会对传入的简单数据类型的变量产生影响,比如象int类型的参数,即使函数中有过修改,也不会对传入的原变量有影响。由于这样,我们在对简单类型的变量作修改时(比如,想让它们作函数参数,然后在函数中修改它们),会误以为真的修改了变量,其实不然,知道值参的传递就会很容易明白这个道理。所以,我们需要将变量包装成一个对象(例如,设一个对象,以一个int值的变量作参数)这样,以此对象作参数,当在函数中对对象中的int变量修改后,原对象中的值便得到修改了。
由此,我们可以更加深入的看看递归函数的问题。递归函数通过不断的调用自身,其实在做一个不断的入栈然后出栈的过程,随着递归的进行,新递归函数不断的入栈,等到条件满足返回时,再不断的出栈。这样,对于值参的话,每次递归都要将其现在的数据保存到栈中,而变参,则只保存引用,所以,递归函数在不同的编程语言中的应用要相应的注意。比如,数组类型的数据,在object pascal中要定义数组类型的type,这样,每次递归时,实际上是将当前的数组参数作值参存储,即每次递归就要存储相应的数组,这样,每次递归过程实际上是对一个新的数组进行操作。而java就不同,它是以数组变量作参数,这样,每次的递归操作实际上是对同一个数组进行操作。由于有这样的不同,所以,需要在对数组改变后作还原操作,这样,每次才能正确地递归。
用过dephi的人都知道,在object Pascal中,函数的参数传递有两种方式,值传递和变参传递,简单的说,就是加不加var的区别。加了var,就是变参传递,实质上传递的是这个参数的指针,也就是说,在函数中对参数的任何修改,实际上就是参数对应的变量的修改,这样程序执行完后,作为参数传进来的变量的值可能发生改变。而不加var,则就是值传递,实质上,就是将值先拷贝一份,然后,将拷贝的传递给函数,这样,修改实际上对原来的变量没有影响,(因为只是对拷贝的修改)而且,等到函数返回时,函数调用的空间退栈,拷贝的参数空间也被收回。
而Java来说,由于所有的皆是对象,所以,参数传递有所不同。其中,没有了var的区别。但实际上,由于对象作为参数,也就是相当于var式传递,因为,传递给函数的是原对象的指针,这样,对传入的参数的修改,实际上就是作为参数的对象的修改,在这一点上,Java的参数传递实际上和var方式很象。但在简单数据类型做参数上,Java却是遵循值传递的原则,即在函数中修改不会对传入的简单数据类型的变量产生影响,比如象int类型的参数,即使函数中有过修改,也不会对传入的原变量有影响。由于这样,我们在对简单类型的变量作修改时(比如,想让它们作函数参数,然后在函数中修改它们),会误以为真的修改了变量,其实不然,知道值参的传递就会很容易明白这个道理。所以,我们需要将变量包装成一个对象(例如,设一个对象,以一个int值的变量作参数)这样,以此对象作参数,当在函数中对对象中的int变量修改后,原对象中的值便得到修改了。
由此,我们可以更加深入的看看递归函数的问题。递归函数通过不断的调用自身,其实在做一个不断的入栈然后出栈的过程,随着递归的进行,新递归函数不断的入栈,等到条件满足返回时,再不断的出栈。这样,对于值参的话,每次递归都要将其现在的数据保存到栈中,而变参,则只保存引用,所以,递归函数在不同的编程语言中的应用要相应的注意。比如,数组类型的数据,在object pascal中要定义数组类型的type,这样,每次递归时,实际上是将当前的数组参数作值参存储,即每次递归就要存储相应的数组,这样,每次递归过程实际上是对一个新的数组进行操作。而java就不同,它是以数组变量作参数,这样,每次的递归操作实际上是对同一个数组进行操作。由于有这样的不同,所以,需要在对数组改变后作还原操作,这样,每次才能正确地递归。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询