JAVA ПРОГРАММА: проблема с выходом из словаря AVL - PullRequest
1 голос
/ 27 апреля 2020

Я работаю над деревом AVL, в котором хранятся слова и определения. У меня возникли проблемы с использованием командной строки аргумента для чтения моего файла, кажется, он отказывается читать его, если я не запускаю его в качестве аргумента? (Построить аргумент Run в JGr asp). Это код, который я должен запустить в качестве аргумента командной строки в дереве AVL:

   Scanner sc = new Scanner(new File(args[0]));
   Scanner scanner = new Scanner(System.in);

У меня также возникают трудности при поиске высоты моего дерева ? Он продолжает давать мне 0, когда высота файла, который я помещаю, не равна 0

 System.out.println(tree.height(tree.root));

Это весь мой код:

  import java.io.File;
  import java.io.FileNotFoundException;
  import java.util.Scanner;
  import java.util.Vector;
  import java.io.IOException;

  public class Dictionary{


String word;
int height;
Dictionary left;
Dictionary right;

Vector v;


Dictionary(String data,String Defn)
{
    word = data;
    v = new Vector();
    v.add(Defn);
    height = 1;

  }
 }

    class AVLTree {

    Dictionary root;

    static int flag = 0;

    int height(Dictionary N) {
     if (N == null)
        return 0;

        return N.height;

        }

        int max(int a, int b) {
           return (a > b) ? a:b;

           }

           Dictionary rightRotate(Dictionary input) {
           Dictionary x = input.left;
           Dictionary y = x.right;

           x.right = input;
           input.left = y;

           input.height = max(height(input.left), height(input.right)) + 1; 
           x.height = max(height(x.left), height(x.right)) + 1;

           return x;

           }

           Dictionary leftRotate(Dictionary x) {
              Dictionary input = x.right;
              Dictionary y = input.left;

           input.left = x; 
           x.right = y; 


           x.height = max(height(x.left), height(x.right)) + 1; 
           input.height = max(height(input.left), height(input.right)) + 1; 


           return input; 

          }
          int getBalance(Dictionary N) {
           if (N == null)
              return 0;

              return height(N.left) - height(N.right);
          }
          //insert
          Dictionary insert(Dictionary root, String word, String Defn) {

          if (root == null)
           return (new Dictionary(word,Defn));

           if ((word.compareTo(root.word)) < 0) 
              root.left = insert(root.left, word,Defn);

           else if ((word.compareTo(root.word)) > 0) 
              root.right = insert(root.right, word,Defn); 

            else 

            return root; 

            root.height = 1 + max(height(root.left), 
                          height(root.right)); 

    int balance = getBalance(root); 


    if (balance > 1 && (word.compareTo(root.left.word)) < 0)
        return rightRotate(root); 


    if (balance < -1 && (word.compareTo(root.left.word)) < 0) 
        return leftRotate(root); 


    if (balance > 1 && (word.compareTo(root.left.word)) < 0) { 
        root.left = leftRotate(root.left); 
        return rightRotate(root); 
    } 


    if (balance < -1 && (word.compareTo(root.left.word)) < 0) { 
        root.right = rightRotate(root.right); 
        return leftRotate(root); 
    } 


    return root; 
} 

void search(Dictionary root,String word) {
    if (root == null)
     {
        if(word.equals(root.word)){
        flag = 1;
        for(int i=0;i<root.v.size();i++)
                System.out.println(root.v.get(i));
        }
        this.search(root.left,word);
        this.search(root.right,word);
    } 
} 

public static void main(String[] args) throws Exception {

  AVLTree tree = new AVLTree();


      while(sc.hasNext()) {
       String str = sc.nextLine();
       String arr[] = str.split(" ");
       String word = arr[0];
       String Defn = str.substring(arr[0].length()+1);
       tree.root = tree.insert(tree.root,word,Defn);
       }

       System.out.println(tree.height(tree.root));

       while(true){
       System.out.print("$ ");
       String command = scanner.next();
       if(command.equals("SEARCH")){
           String word = scanner.next();
           flag = 0;
           tree.search(tree.root,word);
           if(flag == 0)
               System.out.println("Word does not exist");
       }
       else if(command.equals("EXIT"))
           break;
       else
           System.out.println("Invalid Command");
   }
   }
   }
...