我正在尝试Sphere Online Judge(SPOJ)的Next Palindrome问题,我需要找到一个高达一百万位整数的回文.我想过使用Java的函数来反转字符串,但它们是否允许String这么长?
我有一个单元测试,我已经静态定义了一个非常大的字节数组(超过8000字节)作为我每次运行单元测试时不想读取的文件的字节数据.
private static final byte[] FILE_DATA = new byte[] {
12,-2,123,................
}
Run Code Online (Sandbox Code Playgroud)
这在Eclipse中编译很好,但是当通过Ant脚本编译时,我收到以下错误:
[javac] C:\workspace\CCUnitTest\src\UnitTest.java:72: code too large
[javac] private static final byte[] FILE_DATA = new byte[] {
[javac] ^
Run Code Online (Sandbox Code Playgroud)
任何想法为什么以及如何避免这种情况?
答:Shimi的答案就行了.我将字节数组移到一个单独的类,它编译得很好.谢谢!
显然,javac中的初始化字符串的大小是有限的.任何人都可以帮我确定最高限度是什么吗?
谢谢
编辑:
我们正在构建一个初始化字符串,它看起来像"{1,2,3,4,5,6,7,8 ......}",但理想情况下有10,000个数字.当我们为1000执行此操作时,10,000会抛出一个错误,说代码对于try语句来说太大了.
为了产生这个,我们使用了一个stringbuilder并在一个附加值的数组上循环.显然这是javac的限制.我们被告知,如果我们以小块的形式传递它,我们可以在我们调用的方法中重建数组.然而,这是不可能的,因为我们无法控制我们正在调用的用户方法.
我想发布代码,但不能,因为这是一个大学的项目.我不是在寻找代码解决方案,只是帮助理解这里的实际问题.
它的for循环是罪犯
Object o = new Object()
{
public String toString()
{
StringBuilder s = new StringBuilder();
int length = MainInterfaceProcessor.this.valuesFromData.length;
Object[] arrayToProcess = MainInterfaceProcessor.this.valuesFromData;
if(length == 0)
{
//throw exception to do
}
else if(length == 1)
{
s.append("{" + Integer.toString((Integer)arrayToProcess[0])+"}");
}
else
{
s.append("{" + Integer.toString((Integer)arrayToProcess[0])+","); //opening statement
for(int i = 1; i < length; i++)
{
if(i == (length - 1))
{
//last element in the array so dont add comma …Run Code Online (Sandbox Code Playgroud)