2 hj199212 hj199212 于 2016.01.19 19:32 提问

java程序在eclipse运行正确,在牛客网测试界面运行报错

在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();
        }

    }
}

4个回答

caozhy
caozhy   Ds   Rxr 2016.01.19 19:46

程序根本就不对
你输入aaaaaaaaaaaaaaaaa
你输出什么?

caozhy
caozhy   Ds   Rxr 2016.01.19 19:49

1aaaaaaaaa
2aaaaaaaaaaaaaaa
3aaaaaaaaaaaaaaaa
你这样输入

91program
91program   Ds   Rxr 2016.01.19 19:51

例如 for(int i=0;i<(len/8+1);i++) 中 当 len 等于 8 的位数时,你的代码肯定会越界。

qq_31325033
qq_31325033   2016.01.20 09:50
 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");
                }
          }

        }


Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!