Decision tables: Difference between revisions
Content added Content deleted
SqrtNegInf (talk | contribs) m (→{{header|Sidef}}: Fix link: Perl 6 --> Raku) |
|||
Line 849: | Line 849: | ||
For large numbers of rules and few actions, J's native support of sparse arrays might provide a performance advantage, particularly in space. A minor note about the implementation here: the verb (function) <tt>troubleshoot</tt> is generalized, and reusable on any set of rule table, questions, and suggested actions. The default is to use those given in the printer troubleshooting table. |
For large numbers of rules and few actions, J's native support of sparse arrays might provide a performance advantage, particularly in space. A minor note about the implementation here: the verb (function) <tt>troubleshoot</tt> is generalized, and reusable on any set of rule table, questions, and suggested actions. The default is to use those given in the printer troubleshooting table. |
||
=={{header|Java}}== |
|||
{{trans|Kotlin}} |
|||
<lang java>import java.io.BufferedReader; |
|||
import java.io.IOException; |
|||
import java.io.InputStreamReader; |
|||
import java.util.List; |
|||
import java.util.Objects; |
|||
public class DecisionTables { |
|||
private static class Pair<T, U> { |
|||
private final T t; |
|||
private final U u; |
|||
public static <T, U> Pair<T, U> of(T t, U u) { |
|||
return new Pair<>(t, u); |
|||
} |
|||
public Pair(T t, U u) { |
|||
this.t = t; |
|||
this.u = u; |
|||
} |
|||
public T getFirst() { |
|||
return t; |
|||
} |
|||
public U getSecond() { |
|||
return u; |
|||
} |
|||
} |
|||
private static final List<Pair<String, String>> conditions = List.of( |
|||
Pair.of("Printer prints", "NNNNYYYY"), |
|||
Pair.of("A red light is flashing", "YYNNYYNN"), |
|||
Pair.of("Printer is recognized by computer", "NYNYNYNY") |
|||
); |
|||
private static final List<Pair<String, String>> actions = List.of( |
|||
Pair.of("Check the power cable", "NNYNNNNN"), |
|||
Pair.of("Check the printer-computer cable", "YNYNNNNN"), |
|||
Pair.of("Ensure printer software is installed", "YNYNYNYN"), |
|||
Pair.of("Check/replace ink", "YYNNNYNN"), |
|||
Pair.of("Check for paper jam", "NYNYNNNN") |
|||
); |
|||
public static void main(String[] args) throws IOException { |
|||
final int nc = conditions.size(); |
|||
final int na = actions.size(); |
|||
final int nr = conditions.get(0).getSecond().length(); |
|||
final int np = 7; |
|||
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); |
|||
System.out.println("Please answer the following questions with a y or n:"); |
|||
final boolean[] answers = new boolean[nc]; |
|||
for (int c = 0; c < nc; ++c) { |
|||
String input; |
|||
do { |
|||
System.out.printf(" %s ? ", conditions.get(c).getFirst()); |
|||
input = br.readLine().toUpperCase(); |
|||
} while (!Objects.equals(input, "Y") && !Objects.equals(input, "N")); |
|||
answers[c] = Objects.equals(input, "Y"); |
|||
} |
|||
System.out.println("\nRecommended action(s)"); |
|||
outer: |
|||
for (int r = 0; r < nr; ++r) { |
|||
for (int c = 0; c < nc; ++c) { |
|||
char yn = answers[c] ? 'Y' : 'N'; |
|||
if (conditions.get(c).getSecond().charAt(r) != yn) { |
|||
continue outer; |
|||
} |
|||
} |
|||
if (r == np) { |
|||
System.out.println(" None (no problem detected)"); |
|||
} else { |
|||
for (Pair<String, String> action : actions) { |
|||
if (action.getSecond().charAt(r) == 'Y') { |
|||
System.out.printf(" %s\n", action.getFirst()); |
|||
} |
|||
} |
|||
} |
|||
break; |
|||
} |
|||
} |
|||
}</lang> |
|||
{{out}} |
|||
<pre>Please answer the following questions with a y or n: |
|||
Printer prints ? n |
|||
A red light is flashing ? n |
|||
Printer is recognized by computer ? n |
|||
Recommended action(s) |
|||
Check the power cable |
|||
Check the printer-computer cable |
|||
Ensure printer software is installed</pre> |
|||
=={{header|JavaScript}}== |
=={{header|JavaScript}}== |