给出堆栈溢出的java程序

uoifb46i  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(258)

这个问题在这里已经有答案了

什么是StackOverflowerr(15个答案)
上个月关门了。
在执行过程中的问题是给堆栈溢出问题,但这是什么!
运行时错误(nzec)
sun.nio.cs.us\u ascii$encoder.encodeArrayLop(us\u ascii)处的线程主java.lang.StackOverflowerError中出现异常。java:198)在sun.nio.cs.us\u ascii$encoder.encodeloop(us\u ascii。java:231)在java.nio.charset.charsetencoder.encode(charsetencoder。java:579)在sun.nio.cs.streamncoder.implwrite(streamncoder。java:271)在sun.nio.cs.streamncoder.write(streamncoder。java:125)在java.io.outputstreamwriter.write(outputstreamwriter。java:207)在java.io.bufferedwriter.flushbuffer(bufferedwriter。java:129)在java.io.printstream.write(printstream。java:526)在java.io.printstream.print(printstream。java:669)解决,解决。java:22)在解决方案。java:23)解决,解决。java:23)解决,解决。java:23)解决,解决。java:23)解决,解决。java:23)解决,解决。java:27)解决,解决。java:23)解决,解决。java:27)解决,解决。java:23)

import java.util.*;
public class Solution {

    public static void printIncreasingNumber(int n) {
        /* Your class should be named Solution.
         * Don't write main() function.
        * Don't read input, it is passed as function argument.
        * Print output as specified in the question
        */
        int k = 10;
        int N = (int)Math.pow(10,n);//limit
        solve((int)Math.pow(10,n-1),N);
    }

    static void solve(int j,int n){
        if(j==n){
            return;
        }

        if(check(j)){
            System.out.print(j+" ");
            solve(j+1,n);
        }
        else{
            j = increase(j,n);
            solve(j,n);
        }
    }

    static boolean check(int k){
        ArrayList<Integer> arr = new ArrayList<>();
        int temp = k;
        while(temp>0){
            arr.add(temp%10);
            temp = temp/10;
        }
        boolean ans = true;
        for(int i=0;i<arr.size()-1;i++){
            if(arr.get(i)<=arr.get(i+1)){
                ans = false;
                return ans;
            }
        }
        return ans;
    }

    static int increase(int j,int n){
        int ans = 0;
        for(int i = j;i<n;i++){
            ArrayList<Integer> arr1 = new ArrayList<>();
            int temp = i;
            while(temp>0){
                arr1.add(temp%10);
                temp = temp/10;
            }
            int count = 0;
            for(int i1=0;i1<arr1.size()-1;i1++){
                if(arr1.get(i1)<=arr1.get(i1+1)){
                    count++;
                }
            }
            if(count==0){
                ans = i;
                break;
            }
        }
        return ans;
    }
}

我的主要职能是,

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        int a;
        Scanner s = new Scanner(System.in);
        a = s.nextInt();
        Solution.printIncreasingNumber(a);
    }

}
vvppvyoh

vvppvyoh1#

代码中有几个问题:
而不是 if(j==n){ 你应该使用 if(j>=n){ 它看起来像函数 increase 有bug,由于此函数返回相同的数字或0(对于 increase 功能,不是吗?)。例如,如果调用printincreasingnumber(2),当j=90时,此函数返回0,并且有不定式循环(从0到90反复调用solve函数),
p、 我建议您使用任何java debbuger进行检查,然后您可以一步一步地查看所有数字。

相关问题