问题描述
- java程序在eclipse运行正确,在牛客网测试界面运行报错
-
在eclipse可以正常运行,在牛客网的测试里报错:“运行错误:请检查是否存在数组越界非法访问,野指针乱访问,空指针乱访问等情况。”
题目:连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
?长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
输入例子:
abc
123456789输出例子:
abc00000
12345678
90000000import java.util.Scanner;
public class SplitTest {private void getresult(String str) { int len=str.length(); if(str!=null && len<101 && len>0) { if(len%8>0) { for(int i=0;i<8-len%8;i++) { str=str+"0"; } } char []ch=str.toCharArray(); //int num=str.length(); for(int i=0;i<(len/8+1);i++) { for(int j=i*8;j<(i+1)*8;j++) { System.out.print(ch[j]); } System.out.println("r"); } } } public static void main(String [] args) { Scanner sc=new Scanner(System.in); //while(sc.hasNextLine()) { SplitTest inst=new SplitTest(); String input=sc.next(); String input1=sc.next(); inst.getresult(input); inst.getresult(input1); sc.close(); } } }
解决方案
程序根本就不对
你输入aaaaaaaaaaaaaaaaa
你输出什么?
解决方案二:
1aaaaaaaaa
2aaaaaaaaaaaaaaa
3aaaaaaaaaaaaaaaa
你这样输入
解决方案三:
例如 for(int i=0;i<(len/8+1);i++) 中 当 len 等于 8 的位数时,你的代码肯定会越界。
解决方案四:
private void getresult(String str)
{
int len=str.length(); //假设初始len为8
if(str!=null && len<101 && len>0)
{
if(len%8>0) //因为len为8所以跳过该if块
{
for(int i=0;i<8-len%8;i++)
{
str=str+"0";
}
}
char []ch=str.toCharArray(); //因为已确定len为8. 则数组chsize也为8
//int num=str.length();
for(int i=0;i<(len/8+1);i++) //**注意这里!因为len为8所以实际上你的for循环跳出条件为i<2。 那么你的外循环必须走两次。**
{
for(int j=i*8;j<(i+1)*8;j++) //已知你的len为8并且ch的size也为8,但是外循环走两次,明显输出到了ch[8]-ch[15]。所以越界
{
System.out.print(ch[j]);
}
System.out.println("r");
}
}
}
时间: 2024-10-31 14:44:13