在eclipse可以正常运行,在牛客网的测试里报错:“运行错误:请检查是否存在数组越界非法访问,野指针乱访问,空指针乱访问等情况。”
题目:连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
输入例子:
abc
123456789
输出例子:
abc00000
12345678
90000000
import 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");
}
}
}