在Java中从一个方法调用另一个方法时遇到问题
我设置代码的方法是在一个方法中声明数组,然后在另一个方法中以类似表格的方式打印出来。但是我想在只使用main()函数的情况下执行此操作 我已经删除了大部分不相关的代码,下面是我的代码:在Java中从一个方法调用另一个方法时遇到问题,java,arrays,Java,Arrays,我设置代码的方法是在一个方法中声明数组,然后在另一个方法中以类似表格的方式打印出来。但是我想在只使用main()函数的情况下执行此操作 我已经删除了大部分不相关的代码,下面是我的代码: public static void main(String[] array) { test2(array); } public static void test() { String[] array = {"1","2","3","4","5","6","7","8","9","10","11
public static void main(String[] array) {
test2(array);
}
public static void test() {
String[] array = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16"};
}
public static void test2( String[] array ) {
int count = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
System.out.print(array[count] + "\t");
count++;
}
System.out.println();
System.out.println();
System.out.println();
}
}
publicstaticvoidmain(字符串[]数组){
test2(数组);
}
公共静态无效测试(){
字符串[]数组={“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”、“14”、“15”、“16”};
}
公共静态void test2(字符串[]数组){
整数计数=0;
对于(int i=0;i<4;i++){
对于(int j=0;j<4;j++){
系统输出打印(数组[计数]+“\t”);
计数++;
}
System.out.println();
System.out.println();
System.out.println();
}
}
当我尝试运行它时,它会在“System.out.print(array[count]+“\t”);行中出现java.lang.arrayoutofBond
有人知道这是为什么和/或如何修复吗?您有几个错误:
test()
中将数组创建为局部变量
test()
test2()
方法试图访问空数组的第一个元素,从而导致异常
这是您应该做的,但是在代码之后继续阅读,我还没有完成:
public static void main(String[] args) { // This array is defined, but don't use it.
test2(test());
}
public static String[] test() {
return new String[]{"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16"};
}
public static void test2( String[] array ) {
int count = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
System.out.print(array[count] + "\t");
count++;
}
System.out.println();
System.out.println();
System.out.println();
}
}
publicstaticvoidmain(String[]args){//已定义此数组,但不要使用它。
test2(test());
}
公共静态字符串[]测试(){
返回新字符串[]{“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”、“14”、“15”、“16”};
}
公共静态void test2(字符串[]数组){
整数计数=0;
对于(int i=0;i<4;i++){
对于(int j=0;j<4;j++){
系统输出打印(数组[计数]+“\t”);
计数++;
}
System.out.println();
System.out.println();
System.out.println();
}
}
此代码仍然存在问题。您确实假设数组中有16个元素。但你不确定。哦,是的,你肯定,因为你已经添加了它们,但你不应该假设情况总是这样
因此,无论如何,检查元素的实际数量是很好的
public static void test2( String[] array ) {
int count = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (count < array.length) {
System.out.print(array[count] + "\t");
count++;
}
}
System.out.println();
System.out.println();
System.out.println();
}
}
publicstaticvoidtest2(字符串[]数组){
整数计数=0;
对于(int i=0;i<4;i++){
对于(int j=0;j<4;j++){
if(计数<数组长度){
系统输出打印(数组[计数]+“\t”);
计数++;
}
}
System.out.println();
System.out.println();
System.out.println();
}
}
好吧,它不起作用,因为当“main”调用“test2(array)”时,它什么也不传递,因为main中没有定义“array”
您想要的数组只存在于“test”方法中
因此,一个简单的解决方案是将代码更改为:
public static void main(String[] array) {
test2(test());
}
public static String[] test() {
String[] array = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16"};
return array;
}
public static void test2( String[] array ) {
int count = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
System.out.print(array[count] + "\t");
count++;
}
System.out.println();
System.out.println();
System.out.println();
}
}
publicstaticvoidmain(字符串[]数组){
test2(test());
}
公共静态字符串[]测试(){
字符串[]数组={“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”、“14”、“15”、“16”};
返回数组;
}
公共静态void test2(字符串[]数组){
整数计数=0;
对于(int i=0;i<4;i++){
对于(int j=0;j<4;j++){
系统输出打印(数组[计数]+“\t”);
计数++;
}
System.out.println();
System.out.println();
System.out.println();
}
}
…以便方法test()在main中调用时返回数组
但是,代码仍然没有多大意义,特别是在面向对象编程中。test中的变量
array
是本地变量。局部变量在声明它们的块之外是不可访问的。main
中的变量array
直接传递给test2
,但这只是命令行参数,与test
中的array
无关。而且你也没有在任何地方调用test()
。那代码正是我在回答中写的,不折不扣地。。。在你之前整整5分钟。我的答案显示了代码中的所有问题,而不是唯一明显的问题。很抱歉,你觉得我复制了你,但我可能与你同时编写了答案。这很有效!谢谢你帮助我,也谢谢你解释我的错误。