给出堆栈溢出的Java程序
在执行过程中,问题是堆栈溢出问题,但这是什么 运行时错误(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)给出堆栈溢出的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
您的代码中有几个问题:
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);
}
}