Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
给出堆栈溢出的Java程序_Java_Recursion_Stack Overflow - Fatal编程技术网

给出堆栈溢出的Java程序

给出堆栈溢出的Java程序,java,recursion,stack-overflow,Java,Recursion,Stack Overflow,在执行过程中,问题是堆栈溢出问题,但这是什么 运行时错误(NZEC) 主线程java.lang.StackOverflower中的异常位于 sun.nio.cs.US_ASCII$Encoder.encodeArrayLoop(US_ASCII.java:198)位于 sun.nio.cs.US_ASCII$Encoder.encodeLoop(US_ASCII.java:231)位于 java.nio.charset.CharsetEncoder.encode(CharsetEncoder.j

在执行过程中,问题是堆栈溢出问题,但这是什么

运行时错误(NZEC)

主线程java.lang.StackOverflower中的异常位于 sun.nio.cs.US_ASCII$Encoder.encodeArrayLoop(US_ASCII.java:198)位于 sun.nio.cs.US_ASCII$Encoder.encodeLoop(US_ASCII.java:231)位于 java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:579)位于 sun.nio.cs.streamncoder.implWrite(streamncoder.java:271)位于 write(streamncoder.java:125)位于 java.io.OutputStreamWriter.write(OutputStreamWriter.java:207)位于 flushBuffer(BufferedWriter.java:129)位于 write(PrintStream.java:526)位于 PrintStream.print(PrintStream.java:669)位于 Solution.solve(Solution.java:22)位于Solution.solve(Solution.java:23) at Solution.solve(Solution.java:23)at Solution.solve(Solution.java:23)位于Solution.solve(Solution.java:23) at Solution.solve(Solution.java:23)at Solution.solve(Solution.java:27)位于Solution.solve(Solution.java:23) at Solution.solve(Solution.java:27)at Solution.solve(Solution.java:23)


您的代码中有几个问题:

  • 如果(j==n){你应该使用
    if(j>=n){

  • 看起来函数
    increase
    有错误,因为该函数返回相同的数字或0(对于
    increase
    函数来说很奇怪,不是吗?),


  • p.S.我建议您使用任何Java debbuger进行检查,然后您可以一步一步地查看所有数字。

    我想更正代码。我需要知道问题出在哪里。在添加递增函数之前,这段代码运行得很好,但添加该函数之后,它会出现此问题。
    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);
        }
    
    }