# wie auf ein feld mit leerzeichen in einem char array prüfen?



## MrWulf (7. Mrz 2008)

ich will meinem programm sagen, dass es ein bestimmtes feld in einem array nur ausgeben soll, wenn darin kein leerzeichen ist. also hab ich versucht, diese bedingung als

if(arrayname_!=' '){
    .....
    }



zu formulerien, allerdings schnallt das programm das nicht. wenn im char array nämlich ein leerzeichen ist, wird das leerzeichen scheinbar nicht mal als arrayelement gezählt, sondern zusammengefasst mit dem nächsten buchstaben. wie kann ich mein programm veranlassen, für ein arrayfeld, das ein leerzeichen enthält, eine bestimmte aktion durchzuführen?

danke für antworten_


----------



## SlaterB (7. Mrz 2008)

```
public class Test
{

    public static void main(String[] args)
        throws Exception
    {
        char[] arrayname = new char[]
            {'a', 'b', ' ', 'd'};
        for (int i = 0; i < arrayname.length; i++)
        {
            if (arrayname[i] != ' ')
            {
                System.out.println("i: " + i + ", " + arrayname[i]);
            }
        }
    }
}
```
funktioniert


----------



## MrWulf (8. Mrz 2008)

ich übergebe die arrayelemente nicht im programm selbst, sondern als aufrufparameter über die konsole und zwar am stück, also z.b. "AB CDEF  G", und da werden die leerzeichen leider nicht richtig interpretiert, also nicht als einzelne arrayelemente gezählt. was mache ich falsch, kann mir jmd helfen?


----------



## MrWulf (8. Mrz 2008)

```
public class ConvertTree {

    char[] tree; //tree is a reference to an array of char

    /**
     * Constructor
     **/
    ConvertTree(char[] a) {
      tree = a;
    }

    // param i: position in array
    // param j: current indention-level
    // i%2 prüft, ob der aktuelle index eine gerade zahl ist und ob es somit möglich ist, zu einem rechten nachfolger des oberen knotens zu gehen oder ob man sich bereits
    // beim rechten nachfolger befindet
    void indent( int i, int j ) {
    	
        	if(i >= (tree.length)) return;
        
            // Print a space for each new tree-level
            for( int n=0; n<j; n++ ) {
                System.out.print( " " );
            }
            
            System.out.println(tree[i]);
            
            if (tree[2*i]== ' '){
            	if(tree[i+1] != ' ' && i%2==0){
            		indent(i+1,j);
            	}
            	else{
            		indent(i/2,j-1);
            	}
            }
            else{
            //recursive calls
            indent( 2*i ,j+1);
            }
    }

    
    
    /**
     * Give the programm the tree's array-representation as a
     * single string argument.
     * If your representation includes space characters,
     * then include quotes.
     * Example:
     *
     * java CovertTree $"123  67"$
     *
     * Test the programm with the following inputs (a missing node
     * is represented by a space character):
     *
     * "1234567"
     * "1 3  67"
     * "AB D   H       P"
     * "A C   G       O"
     **/
     public static void main( String args[] ) {

        if( args.length == 0 ||  args.length > 1 ) {
            System.out.println( "Invalid input" );
            System.exit( 1 );
        }

        // Prefix the input-string with a space character, so that
        // the effective tree starts at index 1
        String input = " " + args[0];

        //the method toCharArray converts a string in an array of
        //characters
        ConvertTree ct = new ConvertTree(input.toCharArray());

        // ct is an instance of the CovertTree class
        // which is initialised with the given array
        // representation
        ct.indent(1,0);
    }
 }
```

das wäre mal mein programmcode, doch eben werden leerzeichen, die im string als aufrufparameter übergeben werden, leider nicht richtig interpretiert.

zudem habe ich keine idee, wie ich beim durchlaufen des baumes wieder zu einem oberen teilbaum zurückspringen kann. habe ich zum beispiel diesen baum,

      a
     /  \
   b     c
 /      /   \
d      e    f


so muss ich, wenn bei d bin, irgendwie wieder zu c zurückkommen, nur weiss ich nicht, wie ich für einen allgemeinen baum (als array als parameter übergeben beim programmaufruf) bewirken kann. die vollständige aufgabenstellung findet ihr übrigens hier:

http://www.vs.inf.ethz.ch/edu/i2/uebungen/serie2/I2_FS08_U2.pdf

wäre um hilfe dankbar, grüsse


----------



## Pappenheimer++ (8. Mrz 2008)

Hy, das hängt wahrscheinlich von deiner Shell ab, aber versuch mal statt
java ConvertTree a b c
lieber
java ConvertTree "a b c"
. Dann sollte es als ein Argument gezählt werden.


----------

