中易网

java字符串数组输入输出问题

答案:5  悬赏:70  
解决时间 2021-01-29 17:52
题目:自定义一个字符串数组,提示用户输入5个字符串,通过循环语句实现将用户输入的字符串存放到数组里,然后反向输出这5个字符串。下面是我的程序,但是最后输入完5个字符串后有这个异常,求解答:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at zy3_1.main(zy3_1.java:48)

代码:
import java.util.*;
import java.io.*;
public class zy3_1
{
public static void main(String[] args)
{
String[] str;
System.out.println("请输入5个字符串:");
str = new String[4];
Scanner input = new Scanner(System.in);
int i=0;
while(i<5)
{
str[i] = input.nextLine();
++i;
}
int j = 4;
while(j>=0)
{
System.out.println(str[i]);
--j;
}
}
}
最佳答案
太粗心了,首先 str = new String[4]; 改成 str = new String[5];方括号里的是长度而不是下标
错误提示里:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 是指数组越界后面的4代表长度4,不可以放进5个字符。
第二,对于数组用for循环会更方便一些,第二个while循环里不能还用i ,太粗心了用i的话j定义干什么用,这是i=0 必然只能读到一个字符。
最后说一下,做这个问题可以换一下方法或者加大一些难度,比如说输入一句话“java”返回一句“avaj”而不是一个个输入,多注意一下数组越界和循环问题,建议一般不要用++i --i 最好用i++ i-- ,不知道你做到别的题的时候会不会混,符号在后用的比较多
全部回答
数组越界了 将 str = new String[4];改为 str = new String[5];就好了。
int j = 4; while(j>=0) { System.out.println(str[i]); --j; } 这个写在了主函数外面了,写进去。 str[i] 里面的 i 改为 j ,这样应该行了。
这个异常是数组越界异常. ......那个,你的问题是这样的,这道题你是想把输入的5个字符串倒序输出来是么? 如果是的话,请往下看: while (i < 5) { str[i++] = input.nextLine(); } 当i循环结束时,i=5; 而你在定义的String[]存放了5个数据下标即0,1,2,3,4 所以找不到数据,程序抛出数组越界异常. 修改方法: 把while(j>=0){}这个循环内部修改为 while (j >= 0) { System.out.println(str[--i]); --j; } 这样程序就没有问题了,希望对你有所帮助。
import java.util.arrays; public class txe { public static void main(string[] args) { //new java.lang.string [3]; //在堆中分配一个string类对象的空间,并将该对象的地址堆入操作数栈。 string [] s1 = new string[4]; string [] s2 = new string[4]; string [] s3 = new string[4]; system.out.println("0:"+s1); //<输出的是s1的地址> system.out.println("1:"+s1.equals(s1)); // 为什么输出是 true system.out.println("2:"+new string [3].equals("null"));// 为什么,输出是 false <用一个地址与一个字符串比较> system.out.println("3:"+new string[3].equals(null));// 为什么,输出是 false <地址与值比较> system.out.println("4:"+new string[3]);//<输出地址> s1[1]="a"; system.out.println("5:"+s1[3]); system.out.println("6:"+s1[1].equals("a")); //5,6是我自己忘记了,测试用的,汗! system.out.println("7:"+s2+" "+s3);//<输出两个地址> system.out.println("8:"+s2.equals(s3)); // <地址不同> system.out.println("9:"+arrays.equals(s2,s3));//<这个才是数组值与值的比较,注:我前面导入了array包。> system.out.println("10:"+new string[3].equals(new string[3])); // false<每重新分配一次地址都会不一样> } } 结果: 0:[ljava.lang.string;@192d342 1:true 2:false 3:false 4:[ljava.lang.string;@6b97fd 5:null 6:true 7:[ljava.lang.string;@1c78e57 [ljava.lang.string;@5224ee 8:false 9:true 10:false 你写了这道题第七分钟时我就看到了。 不过,用了这么久时间,我才稍稍有点点弄明白,找了n多的资料,问了n多的人。 希望对你有帮助。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
如何使用mysql workbench
锌爽歪歪一箱都是有多少瓶装125ml
为什么全身只有脸最黑
材料成本差异账户的设置前提是() A.材料按
男酸女碱可以生男孩吗,不是说都要碱性的体质
重庆农村商业银行atm(丰乐街道办事处迎仙二环
和女生近距离说话,该看你生哪里?
茅台酒350毫升出厂价
迪斯尼电影花木兰是哪一年拍的
盛世无双是骗人的吗?
重型推拉门选购从哪入手,哪些你有必要知道的
我南山前海大新地铁口附近上班,在哪里租房子
2004年六仺彩开奖现场
终极斗士5完整版什么时候上映
想知道自己有没有解除合同打什么电话查询
推荐资讯
感情线是横直的刚好触到智慧线,但智慧线不是
惹喜欢的女生生气了,她不理我了,该怎么办
听一个在太原工作的亲戚说的。好像叫重机公司
去龙宫拜师怎么去???
农民工被市场保安打了
交通事故,判决后对方拒不履行
西安适居房地产营销策划有限公司地址有知道的
盘古要发10.2越狱了吗
伊美诺生活馆地址在什么地方,想过去办事
葡萄种子多大
西南政法大学行政管理研究生考试科目改了吗?
昆山火车站南广场有到太仓的车吗
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?