2016-06-22 10 views
-3

Ich fange gerade an Java zu lernen. Ich möchte, dass meine Eingabe (ein Array) einen x- und y-Wert akzeptiert, zum Beispiel RR ,S.Java-Benutzereingabe ist ein Array-Typ im Switch-Fall

Das Ergebnis kommt heraus, aber das Problem ist, wenn ich den Wert R,R die Ausgabe gibt default, nicht die passende case. Ich glaube, ich habe etwas falsch mit dem Scanner - ich denke, es ist nicht a.next() aber ich weiß nicht, was dort zu setzen ...

import java.util.Arrays; 
import java.util.Scanner; 

public class testa { 
    public static void main(String[] args) { 
     Scanner a = new Scanner (System.in); 

     String Rotate; 
     String[] Position = new String[]{"R", "S", "RR", "E", "RS"}; 

     System.out.println("Rotate Equation?"); 
     Rotate = a.next(); 

     String[] values = new String[5]; 

     values[0] = "R"; 
     values[1] = "S"; 
     values[2] = "RR"; 
     values[3] = "RS"; 
     values[4] = "RRS"; 

     switch (Arrays.toString(values)) 
     { 
     //cases with "RR" resulted 
     case "[R, R]": 
     case "[S, RS]": 
     case "[RRS,S]": 
      System.out.println("RR"); 
      break; 
      //cases with "E" resulted 
     case "[R,RR]": 
     case "[RR,R]": 
     case "[S,S]": 
     case "[RS,RS]": 
     case "[RRS,RRS]": 
      System.out.println("E"); 
      break; 
      //cases with "RS" resulted 
     case "[R,S]": 
     case "[RR,RRS]": 
     case "[S,RR]": 
     case "[RRS,R]": 
      System.out.println("RS"); 
      break; 
      //cases with "RRS" resulted 
     case "[R,RS]": 
     case "[RR,S]": 
     case "[S,R]": 
     case "[RS,RR]": 
      System.out.println("RRS"); 
      break; 
      //cases with "S" resulted 
     case "[R,RRS]": 
     case "[RR,RS]": 
     case "[RS,R]": 
     case "[RRS,RR]": 
      System.out.println("S"); 
      break; 
      //cases with "R" resulted 
     case "[RR,RR]": 
     case "[S,RRS]": 
     case "[RS,S]": 
     case "[RRS,RS]": 
      System.out.println("R"); 
      break; 
     case "x:D3": 
      System.out.println("x"); 
      break; 
      //other input will be invalid 
     default : 
      System.out.println("Invalid move"); 
      break; 
     } 
    } 
} 
+1

An keinem Punkt in Ihrem Code verweisen Sie als Wert drehen. Wirklich nicht viel über deinen Code macht zu viel Sinn. – basic

+0

stimme ich voll und ganz zu. Wofür stehen alle Abkürzungen? –

Antwort

0

Für dieses Array:

String[] values = new String[5]; 

values[0] = "R"; 
values[1] = "S"; 
values[2] = "RR"; 
values[3] = "RS"; 
values[4] = "RRS"; 

Die Rückkehr von:

Arrays.toString(values) 

Wird:

[R, S, RR, RS, RRS] 

Welche entspricht keiner Ihrer Fallaussagen.

Wie es jetzt aussieht, mit Ihnen erstellen Fall Aussagen basierend auf dem Ergebnis einer Arrays.toString() ist eine wirklich schlechte Art, Dinge zu tun.

  1. Es ist sehr unlesbar und ineffizient.

  2. Es ist nicht wartbar, weil Sie von der Arrays.toString() Implementierung abhängig sind.

Hinweis: Ich nicht vollständig verstehen, was Sie zu tun versuchen, so nehmen Sie bitte die unten stehende Beispiel als nur ein weiterer Weg, um Ihr Problem und nicht als Ersatz, um Ihren Code zu nähern:

Mit diesem gesagt könnte ein besserer Ansatz sein, Ihr Array durchzulaufen und Bedingungen in der for-Schleife zu haben, die Ihre Kriterien erfüllen.

Beispiel:

boolean validMove = false; 
for (String s : values) 
{ 
    if (s.indexOf("RS") != -1) 
    { 
     System.out.println("RS"); 
     validMove = true; 
     break; 
    } 
    else if (s.indexOf("RR") != -1) 
    { 
     System.out.println("RR"); 
     validMove = true; 
     break; 
    } 
    // the rest of your else if's ... 
} 

// this would be your default check 
if (!validMove) 
{ 
    System.out.println("Invalid move"); 
} 

EDIT:

Ein anderer Ansatz wäre, reguläre Ausdrücke zu verwenden.

+0

oh, tut mir leid, dass mein Code keinen Sinn ergibt. Ich bin schließlich neu. Aber was ich meine, ist meine Eingabe accept [x, y] value was ist das "R, RS, etc" und diese Fälle, die ihr sagt, stimmt nicht überein Ich habe versucht das zu schreiben, wenn ich [RR, RR] eingebe Ausgabe ist R ebenso wie die andere so in Ihrer if-sonst-Funktion kann ich Wert hinzufügen Check-in wenn Aussage richtig? – PEPO

+0

Korrekt. Sie können viele in eine Bedingung einschließen. Zum Beispiel, wenn (s.IndexOf ("R")! = -1 || s.IndexOf ("S")! = -1) ' –

+0

am.IndexOf (" R ")! = -1 i don ' Ich verstehe, was dieser Code macht. Bedeutet es, dass s "R" hat und ungleich -1 ist? Mein kleines Gehirn explodierte. gut gesagt, ich möchte überprüfen, dass die Eingabe ist [R, R], dann, wenn Bedingung ich sollte schreiben {if (s.contains ("R, R")} ??? – PEPO

Verwandte Themen