2016-07-27 7 views
0

Hier ein paar Sudo-Code, den ich tun möchte.für Element enthalten null in Java

String[] listA = new String { "a1", "a2"} 
String[] listB = new String { null} 
String[] listC = new String { "c1", "c2"} 

for(String a : listA) { 
    for(String b : listB) { 
    for(String c : listC) { 
     if(a!=null) System.out.print(a); 
     System.out.print(","); 
     if(b!=null) System.out.print(b); 
     System.out.print(","); 
     if(c!=null) System.out.print(c); 
     System.out.println(""); 
    } 
    } 
} 

Mein erwarten Ergebnis ist

a1,,c1 
a1,,c2 
a2,,c1 
a2,,c2 

Aber da ListeB null ist, Code-Logik kann nicht in den Druck bekommen. Ich habe versucht, die Liste zu prüfen und alle Möglichkeiten der Logik wie unten zu machen.

if(listA != null) { 
    for(String a : list A) { 
    if(listB !=null) { 
     for(String b : listB) { 
      if(listC != null) { 
      } 
      else { 
       ... 
      } 
     } 
    } 
    else { 
      .... 
    } 
    } 
} 
else { 
    ...... similar code in here 
} 

Ich glaube nicht, es ist der beste Weg, um dieses Problem zu lösen. Irgendeine Idee davon?

+2

Vielleicht sollten Sie einen echten Java-Code in die Frage einfügen. – immibis

+0

Wie es jetzt ist, funktioniert Ihr Programm nicht, da 'print a' und' print "," 'nicht gültig sind. – immibis

+0

hat den Druckcode als echten Java-Code geändert. –

Antwort

1

Was Sie wollen, ist die 'product' von drei Sätzen (Listen) genannt. Aber mit der Wendung, dass wenn eine der Listen leer ist, wird sie durch eine Menge mit einem 'leeren Element' ersetzt.

// pseudo code 
String[] safeList(String[] list) { if list.length == 0 return {''} else return list; } 

// carthesian product with a twist 
static void safeProductWithATwist(
    String[] listA, String[] listB, String[] listC) { 
    for(String a: safeList(listA)) 
     for(String b: safeList(listB)) 
     for(String c: safeList(listC)) 
      foo(a, b, c); 
} 
1

Das ist falsch in Java

String[] listA = new String { "a1", "a2"} 
String[] listB = new String { null} 
String[] listC = new String { "c1", "c2"} 

versuchen diese. Dies wird für Sie arbeiten.

public class prac { 
    public static void main(String[] args) { 
     String[] listA = {"a1","a2"}; 
     String[] listB = {null}; 
     String[] listC = {"c1", "c2"}; 

for(String a : listA) { 
    for(String b : listB) { 
    for(String c : listC) { 
     if(a!=null) System.out.print(a); 
     System.out.print(","); 
     if(b!=null) System.out.print(b); 
     System.out.print(","); 
     if(c!=null) System.out.print(c); 
     System.out.println(""); 
    } 
    } 
} 

    } 

} 
1
package Test; 

public class Test { 

    public static void main(String[] args) { 
     String[] listA = { "a1", "a2"}; 
     String[] listB = { null}; 
     String[] listC = { "c1", "c2"}; 
     int count = 0; 

     for(String a : listA) { //Two time it will enter 

      for(String b : listB) { 
       count++; 
       System.out.println(""); 
       System.out.println("Count"+count); 
       System.out.println(""); 
      for(String c : listC) { 
       System.out.println(""); 
       if(a!=null) System.out.print(a); 
       System.out.print(","); 
       if(b!=null) System.out.print(b); 
       System.out.print(","); 
       if(c!=null) System.out.print(a); 
      } 
      } 
     } 
    } 

} 

OUTPUT

Count1 


a1,,a1 
a1,,a1 
Count2 


a2,,a2 
a2,,a2 

es in Schleife tritt, weil null ein Element in ListeB ist. Es wird also nicht b gedruckt, weil Sie nach b!=null suchen. Und in der Antwort auch einige Fehler im Code korrigiert.