创建所有组合 Java
Create all Combinations Java
我想创建具有两个状态(1 和 0)的所有组合。
如果我用两个 for 循环来做这件事,这就有效。但是当我使用自调用函数时它不会。请问有人能告诉我为什么吗?
For 循环:
public class Counter {
public Counter() {
loop(iter);
for (int i=0; i < 2; i++) {
for (int i2=0; i2 < 2; i2++) {
System.out.println(Integer.toString(i)+Integer.toString(i2));
}
}
}
public static void main(String args[]){
new Counter();
}
}
自调用函数:
class Stringhelper {
public Stringhelper() {
}
public String getstring(String string,int beginning,int ending) {
if (string.length() != 0) {
String newstring="";
for (int iter=Math.abs(beginning); iter < ending && iter < string.length(); iter=iter+1) {
newstring=newstring+Character.toString(string.charAt(iter));
}
return newstring;
}
else {
return "";
}
}
}
public class Counter {
public String abil="";
public int iter=1;
public Stringhelper shelper=new Stringhelper();
public void loop(int iter) {
for (int i=0; i < 2; i++) {
abil=abil+Integer.toString(i);
if (iter==0) {
System.out.println(abil);
abil=shelper.getstring(abil,0,abil.length()-1);
}
else {
loop(iter-1);
}
}
}
public Counter() {
loop(iter);
}
public static void main(String args[]){
new Counter();
}
}
并且使用自调用函数输出是 00,01,010,011 而不是 00,01,10,11
在此处解释您的代码(暂时忽略能力):
public void loop(int iter) {
for (int i=0; i < 2; i++) {
abil=abil+Integer.toString(i);
if (iter==0) {
System.out.println(abil);
abil=shelper.getstring(abil,0,abil.length()-1);
}
else {
loop(iter-1);
}
}
}
当 iter 为 0 时将打印它
在下一次迭代中,当它不等于0时,创建另一个循环,添加到堆栈中,再次从0开始,并打印abil的新堆栈值。
当您创建一个新堆栈时,它会重新创建临时存储中的所有变量,直到代码退出。在这种情况下,它会不断创建堆栈并且永远不会退出。要退出堆栈,请使用 return.
总之,您需要详细了解堆栈和递归的工作原理才能解决您的问题。
public void loop(int iter) {
for (int i=0; i < 2; i++) {
if (i==1) {
abil=shelper.getstring(abil,0,iter);
}
abil=abil+Integer.toString(i);
if (iter==4) {
System.out.println(abil);
}
else {
loop(iter+1);
}
}
}
成功了
我想创建具有两个状态(1 和 0)的所有组合。 如果我用两个 for 循环来做这件事,这就有效。但是当我使用自调用函数时它不会。请问有人能告诉我为什么吗?
For 循环:
public class Counter {
public Counter() {
loop(iter);
for (int i=0; i < 2; i++) {
for (int i2=0; i2 < 2; i2++) {
System.out.println(Integer.toString(i)+Integer.toString(i2));
}
}
}
public static void main(String args[]){
new Counter();
}
}
自调用函数:
class Stringhelper {
public Stringhelper() {
}
public String getstring(String string,int beginning,int ending) {
if (string.length() != 0) {
String newstring="";
for (int iter=Math.abs(beginning); iter < ending && iter < string.length(); iter=iter+1) {
newstring=newstring+Character.toString(string.charAt(iter));
}
return newstring;
}
else {
return "";
}
}
}
public class Counter {
public String abil="";
public int iter=1;
public Stringhelper shelper=new Stringhelper();
public void loop(int iter) {
for (int i=0; i < 2; i++) {
abil=abil+Integer.toString(i);
if (iter==0) {
System.out.println(abil);
abil=shelper.getstring(abil,0,abil.length()-1);
}
else {
loop(iter-1);
}
}
}
public Counter() {
loop(iter);
}
public static void main(String args[]){
new Counter();
}
}
并且使用自调用函数输出是 00,01,010,011 而不是 00,01,10,11
在此处解释您的代码(暂时忽略能力):
public void loop(int iter) {
for (int i=0; i < 2; i++) {
abil=abil+Integer.toString(i);
if (iter==0) {
System.out.println(abil);
abil=shelper.getstring(abil,0,abil.length()-1);
}
else {
loop(iter-1);
}
}
}
当 iter 为 0 时将打印它
在下一次迭代中,当它不等于0时,创建另一个循环,添加到堆栈中,再次从0开始,并打印abil的新堆栈值。
当您创建一个新堆栈时,它会重新创建临时存储中的所有变量,直到代码退出。在这种情况下,它会不断创建堆栈并且永远不会退出。要退出堆栈,请使用 return.
总之,您需要详细了解堆栈和递归的工作原理才能解决您的问题。
public void loop(int iter) {
for (int i=0; i < 2; i++) {
if (i==1) {
abil=shelper.getstring(abil,0,iter);
}
abil=abil+Integer.toString(i);
if (iter==4) {
System.out.println(abil);
}
else {
loop(iter+1);
}
}
}
成功了