2016-03-30 3 views
-1

Я хочу использовать оператор if для множественного выбора со строковой переменной ... Однако я не могу ввести ответ или письмо по своему выбору, и он сразу же выводит " Ошибка ввода ", хотя я еще ничего не добавил ... Могу ли я спросить, что не так с этим кодом?Я хотел бы знать, что не так с этим кодом

System.out.println("Pick your choice: \na. Add Node\nb. Delete Node\nc. Insert Node"); 
    String letterChoice = scan.nextLine(); 

    if(letterChoice.equalsIgnoreCase("A")){ 
     System.out.println("Enter node value: "); 
     int nodeValue = scan.nextInt(); 
     list.addNodes(nodeValue); 
    } 
    else if(letterChoice.equalsIgnoreCase("B")){ 
     System.out.println("Which node to delete? Node #: "); 
     int thisNode = scan.nextInt(); 
     list.deleteNode(thisNode); 
    } 
    else if(letterChoice.equalsIgnoreCase("C")){ 
     System.out.println("Input node number: "); 
     int thisNode = scan.nextInt(); 
     int prevNode = thisNode - 1; 

     System.out.println("Input node value: "); 
     int nodeValue = scan.nextInt(); 

     list.insertNode(nodeValue, prevNode); 
    } 
    else{ 
     System.out.println("Input Error"); 
    } 

Я не мог найти помощь от предыдущих вопросов здесь, пока я не изменить мой код ... Я не хочу, так что я должен был спросить ... Спасибо ...

Полный код ...

import java.util.*; 

    public class DoublyLinkedList { 


     static DNode root; 
     static DNode temp; 
     static DNode current; 


     public void addNodes(int data){ 

      DNode dNode = new DNode(data); 

      if(root==null){ 

       root = dNode; 
       root.previousNode = null; 
       root.nextNode = null; 

      }else{ 

       current = root; 

       while(current.nextNode!=null){ 

        current = current.nextNode; 

       } 

       current.nextNode = dNode; 
       dNode.previousNode = current; 
       dNode.nextNode = null; 

      } 

     } 

     public void insertNode(int data, int after){ 

      DNode dNode = new DNode(data); 

      int ithNode = 1; 

      current = root; 

      while(ithNode != after){ 

       current = current.nextNode; 

       ithNode++; 

      } 

      temp = current.nextNode; 

      current.nextNode = dNode; 
      dNode.nextNode = temp; 
      temp.previousNode = dNode; 
      dNode.previousNode = current; 

     } 

     public void deleteNode(int nodeNumber){ 

      int ithNode = 1; 

      current = root; 

      if(nodeNumber==1){ 

       root = current.nextNode; 
       current.nextNode = null; 
       current.previousNode = null; 

      }else{ 

       while(ithNode != nodeNumber){ 

        current = current.nextNode; 

        ithNode++; 

       } 

       if(current.nextNode == null){ 

        current.previousNode.nextNode = null; 
        current.previousNode = null; 

       }else{ 

        current.previousNode.nextNode = current.nextNode; 
        current.nextNode.previousNode = current.previousNode; 

       } 

      } 

     } 

     public void print(){ 

      current = root; 

      System.out.print("The Linked List: "); 

      do{ 

       System.out.print(" " + current.data + " "); 


       current = current.nextNode; 

      }while(current!=null); 

     } 

     public void printBackwards(){ 

      current = root; 

      while(current.nextNode!=null){ 

       current = current.nextNode; 

      } 

      System.out.print("Inverse: "); 

      do{ 

       System.out.print(" " + current.data + " "); 

       current = current.previousNode; 

      }while(current.previousNode!=null); 

      System.out.print(" " + current.data + " "); 

     } 

     public static void main(String[] args){ 

      DoublyLinkedList list = new DoublyLinkedList(); 
      Scanner scan = new Scanner(System.in); 

      String letterChoice = ""; 
      int nodesNum; 

      System.out.print("Input number of nodes: "); 
      nodesNum = scan.nextInt(); 

      for(int x = 1; x <= nodesNum; x++){ 
       System.out.print("Input value of node #" + x + ": "); 
       int value = scan.nextInt(); 
       list.addNodes(value); 
      } 

      list.print(); 


      System.out.println("Pick your choice: \na. Add Node\nb. Delete Node\nc. Insert Node"); 
      letterChoice = scan.nextLine(); 

      if(letterChoice.equalsIgnoreCase("A.")){ 
       System.out.println("Enter node value: "); 
       int nodeValue = scan.nextInt(); 
       list.addNodes(nodeValue); 
      } 
      else if(letterChoice.equalsIgnoreCase("B.")){ 
       System.out.println("Which node to delete? Node #: "); 
       int thisNode = scan.nextInt(); 
       list.deleteNode(thisNode); 
      } 
      else if(letterChoice.equalsIgnoreCase("C.")){ 
       System.out.println("Input node number: "); 
       int thisNode = scan.nextInt(); 
       int prevNode = thisNode - 1; 

       System.out.println("Input node value: "); 
       int nodeValue = scan.nextInt(); 

       list.insertNode(nodeValue, prevNode); 
      } 
      else{ 
       System.out.println("Input Error"); 
      } 

      list.print(); 
      System.out.println(); 
      list.printBackwards(); 

      System.out.println(); 
      System.out.println("The number of DNodes in the Linked List is " + DNode.noOfLinkedList); 


     } 

    } 


    class DNode { 

     static int noOfLinkedList = 0; 

     int data; 

     DNode previousNode; 
     DNode nextNode; 

     DNode(int data){ 

      this.data = data; 
      noOfLinkedList++; 

     } 

    } 

Спасибо за помощь, но как-то не так с моим JDK или ЦМД, или что ничто не помогает ... или, может быть, я просто не сделать себе ясно ... видите ли, это моя проблема ... Image of the problem

Он работает, да, но это просто переходит к другим частям, где он выдает сообщение «Ошибку ввода» ...

+0

Что такое letterChoice? –

+0

это переменная String ... String ... –

+0

У вас наверняка есть 'nextInt()' выше –

ответ

0

Помните, что Scanner#nextInt метод не потребляет последний символ новой строки вашего входа, и, таким образом, что новая строка потребляется в следующем вызове сканера # nextLine.

посмотрите на это: http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextLine%28%29

QuickFix

System.out.print("Input number of nodes: "); 
nodesNum = scan.nextInt(); 
scan.nextLine(); //this force the reading of the last newline after reading the integer... 

... 
System.out.println("Pick your choice: \na. Add Node\nb. Delete Node\nc. Insert Node"); 
final String letterChoice = scan.nextLine(); 
+0

Спасибо ... но это действительно не помогло ... –

+0

Вы добавляете это scan.nextLine(); внутри цикла for тоже ??? –

+0

Я не ... должен ли я? –

Смежные вопросы