代码给出了123456789的java.lang.StackOverflowError但没有给出9999999999999999999

用户名

因此,我仅通过使用String类来查找下一个回文。

我有点解决了,但是有一个问题。

当我输入类似123456789的字符串时,我得到一个java.lang.StackOverflowError。当我输入较大的字符串(如9999999999999999999)时,不会收到错误消息。我在这个网站上做了一些研究,我认为这与我使用的递归回文法有关。

有什么办法可以改善我的代码,以便处理更大的数字?以及为什么123456789会给出错误而9999999999999999999不会呢?后者更大。

import java.io.*;

public class mainclass {

public static void main(String[] args) throws IOException {
    InputStreamReader isr = new InputStreamReader(System.in);
    BufferedReader in = new BufferedReader(isr);
    System.out.println(palindroom(in.readLine()));
    }

public static String increment(String str){
    String incre="";
    if(str.equals("9")){incre = "10";}
    else{
        switch(str.charAt(str.length()-1)){
        case '0': incre = str.substring(0, str.length()-1)+"1";break;
        case '1': incre = str.substring(0, str.length()-1)+"2";break;
        case '2': incre = str.substring(0, str.length()-1)+"3";break;
        case '3': incre = str.substring(0, str.length()-1)+"4";break;
        case '4': incre = str.substring(0, str.length()-1)+"5";break;
        case '5': incre = str.substring(0, str.length()-1)+"6";break;
        case '6': incre = str.substring(0, str.length()-1)+"7";break;
        case '7': incre = str.substring(0, str.length()-1)+"8";break;
        case '8': incre = str.substring(0, str.length()-1)+"9";break;
        case '9': incre = increment(str.substring(0, str.length()-1))+"0";break;
        };
        }
    return incre;
    }

public static String palindroom(String str){
    String palin=increment(str);
    boolean isPalindroom=true;
    for(int i=0;i<palin.length();i++){
        if(palin.charAt(i)==palin.charAt(palin.length()-i-1)){}
        else{isPalindroom=false;}
    }
    if(isPalindroom){return palin;}
    else{return palindroom(increment(str));}
}
}
泰勒

因为仅当输入的值不是回文,您才进行递归,因此将123456789递增到回文中将需要10,000多次递归。

您的代码有点奇怪,您选择了一个假定为数字的字符串,并使用字符串操作对其进行了递增。转换为long(如果Long不够大,则转换为BigInteger)会更简单。

此外,您似乎增加了两次,一次是在palindroom方法开始时,另一次是在else块中。

更新从您的评论中,我认为您可能不清楚什么是堆栈溢出错误。因此,java调用堆栈是方法的堆栈(即LIFO)。在您的情况下,您的调用堆栈将是main,palindroom,palindroom,palindroom,palindroom,palindroom等。。请注意,java仅允许调用堆栈的最大大小,如果超过此大小,则会出现堆栈溢出异常。Java堆栈溢出错误-如何在Eclipse中增加堆栈大小?有关默认值和配置的一些详细信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Jar文件给出java.lang.NoClassDefFoundError

来自分类Dev

Excel读取给出java.lang.StringIndexOutOfBoundsException

来自分类Dev

改造给出java.lang.VerifyError

来自分类Dev

Long.parseLong给出java.lang.NumberFormatException

来自分类Dev

FilteredList在更新时给出java.lang.ArrayIndexOutOfBoundsException

来自分类Dev

密码查询给出java.lang.OutOfMemoryError

来自分类Dev

jar的IntelliJ给出了“ java.lang.NullPointerException:必需的位置。”

来自分类Dev

插件给出java.lang.NoSuchMethodError:没有直接方法<init>错误

来自分类Dev

通过给出java.lang.ArrayIndexOutOfBoundsException

来自分类Dev

这段代码出了什么问题,它给出了错误

来自分类Dev

使用sbt启动Play 2.2应用程序可以启动,但是dist-ed版本给出了java.lang.IncompatibleClassChangeError

来自分类Dev

Jar文件给出java.lang.NoClassDefFoundError

来自分类Dev

模拟器未给出错误,但设备在putExtra()上给出了java.lang.NullPointerException

来自分类Dev

UDP示例给出了java.lang.ClassNotFoundException:packagename.Foo Exception; 怎么修?

来自分类Dev

代码给出了123456789的java.lang.StackOverflowError但没有给出9999999999999999999

来自分类Dev

下面的代码给出了奇怪的输出

来自分类Dev

当我们没有与之比较的值时,如何在HQL中执行OR给出此错误java.lang.NullPointerException?

来自分类Dev

改造给出java.lang.VerifyError

来自分类Dev

Long.parseLong给出java.lang.NumberFormatException

来自分类Dev

我正在调用userDao.findById(Integer i)并给出java.lang.NullPointerException我给出了db中的确切ID

来自分类Dev

访问Listview中的Element会给出java.lang.NullPointerException

来自分类Dev

Java以新数组作为输入,尽管我两次给出了源代码

来自分类Dev

OpenLDAP上的Java身份验证(基本中没有OU)给出了无效的凭据

来自分类Dev

QuickSort在线程“主”中给出异常java.lang.StackOverflowError

来自分类Dev

以下代码给出了分段错误

来自分类Dev

带有 AndroidJUnitRunner 的 Android 问题给出“java.lang.ClassNotFoundException”

来自分类Dev

错误:java.lang.StackOverflowError

来自分类Dev

Webelement.click() 在 appium 中给出 java.lang.NullPointerException

来自分类Dev

我的代码给出了 java.lang.StringIndexOutOfBoundsException 和命令以非零状态退出

Related 相关文章

  1. 1

    Jar文件给出java.lang.NoClassDefFoundError

  2. 2

    Excel读取给出java.lang.StringIndexOutOfBoundsException

  3. 3

    改造给出java.lang.VerifyError

  4. 4

    Long.parseLong给出java.lang.NumberFormatException

  5. 5

    FilteredList在更新时给出java.lang.ArrayIndexOutOfBoundsException

  6. 6

    密码查询给出java.lang.OutOfMemoryError

  7. 7

    jar的IntelliJ给出了“ java.lang.NullPointerException:必需的位置。”

  8. 8

    插件给出java.lang.NoSuchMethodError:没有直接方法<init>错误

  9. 9

    通过给出java.lang.ArrayIndexOutOfBoundsException

  10. 10

    这段代码出了什么问题,它给出了错误

  11. 11

    使用sbt启动Play 2.2应用程序可以启动,但是dist-ed版本给出了java.lang.IncompatibleClassChangeError

  12. 12

    Jar文件给出java.lang.NoClassDefFoundError

  13. 13

    模拟器未给出错误,但设备在putExtra()上给出了java.lang.NullPointerException

  14. 14

    UDP示例给出了java.lang.ClassNotFoundException:packagename.Foo Exception; 怎么修?

  15. 15

    代码给出了123456789的java.lang.StackOverflowError但没有给出9999999999999999999

  16. 16

    下面的代码给出了奇怪的输出

  17. 17

    当我们没有与之比较的值时,如何在HQL中执行OR给出此错误java.lang.NullPointerException?

  18. 18

    改造给出java.lang.VerifyError

  19. 19

    Long.parseLong给出java.lang.NumberFormatException

  20. 20

    我正在调用userDao.findById(Integer i)并给出java.lang.NullPointerException我给出了db中的确切ID

  21. 21

    访问Listview中的Element会给出java.lang.NullPointerException

  22. 22

    Java以新数组作为输入,尽管我两次给出了源代码

  23. 23

    OpenLDAP上的Java身份验证(基本中没有OU)给出了无效的凭据

  24. 24

    QuickSort在线程“主”中给出异常java.lang.StackOverflowError

  25. 25

    以下代码给出了分段错误

  26. 26

    带有 AndroidJUnitRunner 的 Android 问题给出“java.lang.ClassNotFoundException”

  27. 27

    错误:java.lang.StackOverflowError

  28. 28

    Webelement.click() 在 appium 中给出 java.lang.NullPointerException

  29. 29

    我的代码给出了 java.lang.StringIndexOutOfBoundsException 和命令以非零状态退出

热门标签

归档