2017-02-01 7 views
0

Просто для того, чтобы дать немного контекста, я пытаюсь запрограммировать только простые функции машины Тьюринга. У меня возникли проблемы с сохранением пользовательского ввода (обе строки и целые числа) в arraylist, а затем с программой, прочитанной через массив и выполняющей серию команд на основе ввода. Ниже приведены буквы.Хранение и чтение различных типов ввода пользователя

public void postMenu() 
{ 
    say("\tI\timport file"      ); 
    say("\tM\tenter multiple inputs"   ); 
    say("\tX\texit program"      ); 
    say("\tS\tenter single input"    ); 
    say(""); 
    say("Enter command:"); 
} 
    public void SecondMenu() 
{ 
    say("\t?\tprint current cell"    ); 
    say("\t=\tassign new symbol to current cell"); 
    say("\tE\terase current cell"    ); 
    say("\tL\tmove head to left"    ); 
    say("\tR\tmove head to right"    ); 
    say("\tB\trewind to beginning of tape"  ); 
    say("\tD\tdump contents of tape"   ); 
} 

public void say(String s) 
{ 
    System.out.println(s); 
} 

Так, например, пользователь вводит в M для ввода нескольких входов

Ex: R R 'пустой' R т.д. Программа будет производить ' лента ", которая читает [1, 0, 'blank'] У меня есть проблема с этой частью.

else 
     if (command == 'M') 
     { 
      say("Type Done to finish inputs"); 

      String input = getReq.next(); 
      int binaryinput = getReq.nextInt(); 

      do { 
       List<Object>inputs = new ArrayList<Object>(); 

       while(!"Done".equalsIgnoreCase(input)){ 
        inputs.add(Integer.parseInt(input)); 

        input=getReq.next(); 
        if(inputs.isEmpty()) 
         return; 
       } 
      } while (binaryinput == 0 && binaryinput == 1 && input == " "); 

Прямо сейчас, если я начинаю вводить буквы, я получаю сообщение об ошибке. Для входа пользователя: * Целые не может быть, кроме двоичных чисел (я не совсем уверен, что если «пустой» ввод будет классифицировать как строка или внутр.)

  • Если номера ничего другого чем введенный двоичный код, он вернет сообщение с сообщением об ошибке, указывающее на ввод, и запросит правильный ввод.

  • Буквы также могут быть введены так, чтобы программа перемещалась по ленте.

  • Напечатать «Готово» закончит вход.

Короче говоря, мне нужно, чтобы иметь возможность хранить как двоичные целые числа и строки (буквы и DONE) как объекты в ArrayList (если есть более простой способ для хранения, пожалуйста, включите его), и иметь программу прочитайте упомянутый пользовательский входной массив и выполните команды на основе букв, которые он читает.

+1

ваше время не имеет смысла, вы никогда не будете иметь условие, при котором binaryinput == 0 && binaryinput = = 1, возможно, вы хотели использовать ||? –

+0

также при сравнении строк используют .equals, в том же, пока вы используете == –

ответ

0

Вы делаете слишком много с вашими прочими, и вы также повторно инициализируете новый arraylist каждый раз, что не то, что я думаю, вы хотите. Насколько я понимаю, вы хотите добавить только 1 или 0 и буквы в список массивов?

say("Type Done to Finish Inputs"); 
    String input = ""; 
    Integer binaryinput; 
    List<Object>inputs = new ArrayList<Object>(); 

    do { 
     input = getReq.nextLine(); 
     //check for binary 
     if(input.matches("\\d")) 
     { 
      binaryinput = Integer.parseInt(input); 
      if(binaryinput == 1 || binaryinput == 0) 
       inputs.add(binaryinput); 
     } 
     //check for a single character 
     else 
     { 
      if(input.length() == 1) 
       inputs.add(input); 
     } 
    } while (!input.equals("done")); 

Пример кода Над

Type Done to Finish Inputs 
1 
6 
2 
3 
4 
1 
0 
0 
1 
a 
b 
c 
d 
fg 
done 

входов содержит следующие

[1, 1, 0, 0, 1, a, b, c, d]