Arrays and Recursion - Programmers Heaven

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

Arrays and Recursion

circuz_phreakcircuz_phreak Posts: 49Member
An array containting strings of actual written code needs to be formatted. I'm not sure how to even recursively call a method so it prints the contents of an array, let alone format it's text. Not sure if I even put my methods together properly. The code only prints the first index value of the array, no recursion takes place, and the counter variable value isn't increasing. How do I recursively call the method? Can anyone help?

public static void indent(String[] code){

int counter = 0;
String spaces = " ";

System.out.print(indent(code, counter++, spaces));
}

public static String indent(String[] code, int counter, String spaces){

String tmpStr1,
tmpStr2;

if(counter == 0){
return code[counter];
}

tmpStr1 = code[counter - 1];
tmpStr2 = code[counter];

if(tmpStr1.charAt(tmpStr1.length() - 1) == '{' && counter < code.length - 1){
code[counter] = spaces + tmpStr2;
}

return code[counter];

}

}

Comments

  • zibadianzibadian Posts: 6,349Member
    : An array containting strings of actual written code needs to be formatted. I'm not sure how to even recursively call a method so it prints the contents of an array, let alone format it's text. Not sure if I even put my methods together properly. The code only prints the first index value of the array, no recursion takes place, and the counter variable value isn't increasing. How do I recursively call the method? Can anyone help?
    :
    : public static void indent(String[] code){
    :
    : int counter = 0;
    : String spaces = " ";
    :
    : System.out.print(indent(code, counter++, spaces));
    : }
    :
    : public static String indent(String[] code, int counter, String spaces){
    :
    : String tmpStr1,
    : tmpStr2;
    :
    : if(counter == 0){
    : return code[counter];
    : }
    :
    : tmpStr1 = code[counter - 1];
    : tmpStr2 = code[counter];
    :
    : if(tmpStr1.charAt(tmpStr1.length() - 1) == '{' && counter < code.length - 1){
    : code[counter] = spaces + tmpStr2;
    : }
    :
    : return code[counter];
    :
    : }
    :
    : }
    :
    Recursions and arrays is quite simple. A recursive function calls itself until a certain condition is met. In case of an array the condition is nearly always the end of the array. In pseudo-code it looks something like this:
    [code]
    recurseExample(Array a, int counter) {
    if (counter < a.length) {
    Do something with a[counter]
    recurseExample(a, counter++); // recursiveness
    } else {
    // a[counter] is invalid, since counter >= a.length
    }
    }
    [/code]
    This example "walks" through the array from some point to the end. For example:
    [code]
    recurseExample(a, 2);
    [/code]
    processes the array from the third element to the last.
    The statement "Do something with a[counter]" can be calls to another method, which performs the processing, or it can be code included in the if-then statement.
    Here is a full working example of a recursive function:
    [code]
    int recursiveSum(int[] numbers, int index) {
    int result;
    if (index < numbers.length) {
    result = numbers[index]; // processing
    result = result + recursiveSum(numbers, index++); // recursive call
    } else {
    result = 0
    }
    return result;
    }
    [/code]
  • circuz_phreakcircuz_phreak Posts: 49Member
    Here's the code I have so far. It does what it's supposed to do, I did have a bit of help with it. Could I get anyones opinion? Also one question about arrays and recursion. Is it even possible to get rid of a for loop (when it comes to printing index values of an array), and get the values of an array to print to screen using recursion?

    [code]
    import javax.swing.JOptionPane;

    public class Recursion {

    public static void main (String args[]){

    String[] code = {
    "public class Test {",
    "public static void main(String[] args) {",
    "String s = "Countdown: ";",
    "",
    "for (int i = 1; i <= 20; i++) {",
    "System.out.print(i);",
    "if (i < 20) {",
    "System.out.print(",")",
    "}",
    "System.out.print("...")",
    "}",
    "",
    "System.out.println();",
    "}",
    "}"
    };

    for(int i = 0; i < code.length; i++){
    System.out.println(code[i]);
    }

    System.out.println("===");

    code = indent(code,0,0);

    for(int i = 0; i < code.length; i++){
    System.out.println(code[i]);
    }
    }


    public static String[] indent(String[] code, int counter, int spaces){

    String pad = "";

    if(code[counter].length() == 0){
    counter++;
    }

    if(code[counter].charAt(0) == '}'){

    spaces -=3;

    }

    for(int i = 0; i < spaces; i++){

    pad +=" ";

    }

    code[counter] = pad + code[counter];

    if(code[counter].charAt(code[counter].length() - 1) == '{'){

    spaces +=3;

    }

    if(counter < code.length-1) indent(code,counter+1,spaces);
    return code;

    }
    }
    [/code]

    Zibadian,

    I also wanted to thank you for all of your help, i'm not sure if you've realised that you have helped me before, a couple of months ago, many times. I wasn't able to voice my appreciation because I was out of the country for some time. But I really appreciate all the help you have given me, and value your opinion when it comes to code I write. Thanks again, and i'm sure i'll have some posts in the future and hope to hear back from you. Hope you get this.

  • zibadianzibadian Posts: 6,349Member
    : Here's the code I have so far. It does what it's supposed to do, I did have a bit of help with it. Could I get anyones opinion? Also one question about arrays and recursion. Is it even possible to get rid of a for loop (when it comes to printing index values of an array), and get the values of an array to print to screen using recursion?
    :
    : [code]
    : import javax.swing.JOptionPane;
    :
    : public class Recursion {
    :
    : public static void main (String args[]){
    :
    : String[] code = {
    : "public class Test {",
    : "public static void main(String[] args) {",
    : "String s = "Countdown: ";",
    : "",
    : "for (int i = 1; i <= 20; i++) {",
    : "System.out.print(i);",
    : "if (i < 20) {",
    : "System.out.print(",")",
    : "}",
    : "System.out.print("...")",
    : "}",
    : "",
    : "System.out.println();",
    : "}",
    : "}"
    : };
    :
    : for(int i = 0; i < code.length; i++){
    : System.out.println(code[i]);
    : }
    :
    : System.out.println("===");
    :
    : code = indent(code,0,0);
    :
    : for(int i = 0; i < code.length; i++){
    : System.out.println(code[i]);
    : }
    : }
    :
    :
    : public static String[] indent(String[] code, int counter, int spaces){
    :
    : String pad = "";
    :
    : if(code[counter].length() == 0){
    : counter++;
    : }
    :
    : if(code[counter].charAt(0) == '}'){
    :
    : spaces -=3;
    :
    : }
    :
    : for(int i = 0; i < spaces; i++){
    :
    : pad +=" ";
    :
    : }
    :
    : code[counter] = pad + code[counter];
    :
    : if(code[counter].charAt(code[counter].length() - 1) == '{'){
    :
    : spaces +=3;
    :
    : }
    :
    : if(counter < code.length-1) indent(code,counter+1,spaces);
    : return code;
    :
    : }
    : }
    : [/code]
    :
    : Zibadian,
    :
    : I also wanted to thank you for all of your help, i'm not sure if you've realised that you have helped me before, a couple of months ago, many times. I wasn't able to voice my appreciation because I was out of the country for some time. But I really appreciate all the help you have given me, and value your opinion when it comes to code I write. Thanks again, and i'm sure i'll have some posts in the future and hope to hear back from you. Hope you get this.
    :
    :
    Here's a method, which prints an array recursively:
    [code]
    void recursePrint(String[] stringArray, int index) {
    if (index < stringArray.length) {
    System.out.println(stringArray[index]);
    recursePrint(stringArray, index++);
    }
    }
    [/code]
  • circuz_phreakcircuz_phreak Posts: 49Member
    When I implement the method as follows,

    [CODE]
    import javax.swing.JOptionPane;

    public class A1Q3 {

    public static void main (String args[]){

    String[] code = {
    "public class Ick {",
    "public static void main(String[] args) {",
    "String s = "Countdown: ";",
    "",
    "for (int i = 1; i <= 10; i++) {",
    "System.out.print(i);",
    "if (i < 10) {",
    "System.out.print(",")",
    "}",
    "System.out.print("...")",
    "}",
    "",
    "System.out.println();",
    "}",
    "}"
    };

    recursePrint(code,0);

    //for(int i = 0; i < code.length; i++){
    // System.out.println(code[i]);
    //}

    System.out.println("===");

    code = indent(code,0,0);

    recursePrint(code,0);
    //for(int i = 0; i < code.length; i++){
    // System.out.println(code[i]);
    //}
    }


    public static String[] indent(String[] code, int counter, int spaces){

    String pad = "";

    if(code[counter].length() == 0){
    counter++;
    }

    if(code[counter].charAt(0) == '}'){

    spaces -=3;

    }

    for(int i = 0; i < spaces; i++){

    pad +=" ";

    }

    code[counter] = pad + code[counter];

    if(code[counter].charAt(code[counter].length() - 1) == '{'){

    spaces +=3;

    }

    if(counter < code.length-1) indent(code,counter+1,spaces);
    return code;

    }

    public static void recursePrint(String[] stringArray, int index) {

    if (index < stringArray.length - 1) {

    System.out.println(stringArray[index]);

    recursePrint(stringArray, index++); //line 91

    }

    }

    }
    [/CODE]

    It prints the first index value over and over again, then just says "at A1Q3.recursePrint(A1Q3.java : 91)", which means the problems at line 91 where I call the recursion for printing the values. I'm not sure what to do, the code looks right...
  • zibadianzibadian Posts: 6,349Member
    : When I implement the method as follows,
    :
    : [CODE]
    : import javax.swing.JOptionPane;
    :
    : public class A1Q3 {
    :
    : public static void main (String args[]){
    :
    : String[] code = {
    : "public class Ick {",
    : "public static void main(String[] args) {",
    : "String s = "Countdown: ";",
    : "",
    : "for (int i = 1; i <= 10; i++) {",
    : "System.out.print(i);",
    : "if (i < 10) {",
    : "System.out.print(",")",
    : "}",
    : "System.out.print("...")",
    : "}",
    : "",
    : "System.out.println();",
    : "}",
    : "}"
    : };
    :
    : recursePrint(code,0);
    :
    : //for(int i = 0; i < code.length; i++){
    : // System.out.println(code[i]);
    : //}
    :
    : System.out.println("===");
    :
    : code = indent(code,0,0);
    :
    : recursePrint(code,0);
    : //for(int i = 0; i < code.length; i++){
    : // System.out.println(code[i]);
    : //}
    : }
    :
    :
    : public static String[] indent(String[] code, int counter, int spaces){
    :
    : String pad = "";
    :
    : if(code[counter].length() == 0){
    : counter++;
    : }
    :
    : if(code[counter].charAt(0) == '}'){
    :
    : spaces -=3;
    :
    : }
    :
    : for(int i = 0; i < spaces; i++){
    :
    : pad +=" ";
    :
    : }
    :
    : code[counter] = pad + code[counter];
    :
    : if(code[counter].charAt(code[counter].length() - 1) == '{'){
    :
    : spaces +=3;
    :
    : }
    :
    : if(counter < code.length-1) indent(code,counter+1,spaces);
    : return code;
    :
    : }
    :
    : public static void recursePrint(String[] stringArray, int index) {
    :
    : if (index < stringArray.length - 1) {
    :
    : System.out.println(stringArray[index]);
    :
    : recursePrint(stringArray, index++); //line 91
    :
    : }
    :
    : }
    :
    : }
    : [/CODE]
    :
    : It prints the first index value over and over again, then just says "at A1Q3.recursePrint(A1Q3.java : 91)", which means the problems at line 91 where I call the recursion for printing the values. I'm not sure what to do, the code looks right...
    :
    Try printing the index instead to see if that increases ok. It should then output the numbers 0 to n, where n is the length-2 of the array.
  • circuz_phreakcircuz_phreak Posts: 49Member
    [b][red]This message was edited by circuz_phreak at 2007-1-19 12:41:31[/red][/b][hr]
    Got it working, changed it to:

    [CODE]
    public static void recursePrint(Object[] stringArray, int index) {

    System.out.println(stringArray[index]);

    if (index < stringArray.length - 1) {
    recursePrint(stringArray, index + 1);
    }

    [/CODE]

    Program works great, thanks!!!


Sign In or Register to comment.