我的节点实例的变量和对象中的内容未打印出来



注意

程序运行得很好,问题是当试图打印字典树时,它不会打印单词本身:
+++++Spanisch-Woeterbuch+++++++++
Bitte-waehlen-Sie-eine-Aktion aus!

  1. Einfuegen 2。苏晨3。Beenden
    1
    Bitte geben Sie ein Wort ein:
    Viaje
    Bitte geben Sieme die Bedutung ein:
    Reise
    Wort:&lt------此处出现错误
    Bedeutung:Reise
    Bitte waehlen Sie eine Aktion aus
    1。Einfuegen 2。苏晨3。Beenden

节点类

public class Node{
private String word, definition;
private Node left, right;


public Node (String w, String def){
this.word = w;
this.definition = def;
}

public String getW(){   return this.word;   }

public String getD(){   return this.definition; }

public Node getL(){ return this.left;   }

public Node getR(){ return this.right;  }

public void setL(Node l){   this.left = l;  }

public void setR(Node r){    this.right = r;    }
}

树类

public class Tree{

Node root;

// sorting insert
public void insert(Node newWord){

if ( root == null)  root = newWord;

else insert(root, newWord);
}

protected void insert(Node temp, Node newWord){ // Hello, Tree
if (newWord.getW().compareTo(temp.getW()) < 0){
if (temp.getL() == null )   temp.setL(newWord);

else insert(temp.getR(), newWord);

} else{
if (temp.getR() == null)    temp.setR(newWord);

else insert(temp.getR(), newWord); // "end", "Tree"
}
}

// Output of the entire tree/ dictionary
public void print(){
print(root);
}

protected void print(Node temp){
if (temp.getL() != null )   print(temp.getL());

System.out.println("Wort: " + temp.getW());
System.out.println("Bedeutung: " + temp.getD());

if (temp.getR() != null )   print(temp.getR());
}

public void search(String word){

search(root, word);
/**
@return this.definition or null 
*/  
}

protected String search(Node root, String toBeFound){
if ( root == null)  return null;

if ( root.getW().compareTo(toBeFound) == 0){
System.out.println("Bedeutung vom gesuchten Wort: " + root.getD());
return root.getD();
}

if (root.getW().compareTo(toBeFound) > 0){
return search(root.getL(), toBeFound);
}

return search(root.getR(), toBeFound);
}

// optional
public void delete(Node word){

}
}

字典类

import java.util.*;
public class Dict{
static Tree t = new Tree();
static int menu;
static String word, definition;
static Scanner s = new Scanner(System.in);
static boolean programRunning = true;

public static void main(String[] args){
System.out.println("+++++Spanisch Woerterbuch+++++++");
while ( programRunning ){
showMenu();
}



s.close();
}

private static void showMenu(){
System.out.println("Bitte waehlen Sie eine Aktion aus!");
System.out.printf("1. Einfuegent 2. Suchent 3. Beenden");
System.out.println();
menu = s.nextInt();

switch (menu){
case 1:
System.out.println("Bitte geben Sie ein Wort ein:");
word = s.nextLine();
s.nextLine();
System.out.println("Bitte geben Sie die Bedeutung ein:");
definition = s.nextLine();
Node node = new Node(word, definition);
t.insert(node);
t.print();
break;
case 2:
System.out.println("Bitte geben Sie das zu suchende Wort ein:");
s.nextLine();
word = s.nextLine();
t.search(word);
break;
case 3:
programRunning = false;
break;
default:
System.out.println("Ungueltige Eingabe!");
}
}
}

这个问题相当简单。

Scanner#nextInt()

没有读取换行符,而您编写了

word = s.nextLine();
s.nextLine();

这意味着第一个nextLine()将消耗n并输出空字符串,而第二个将实际读取您输入的文本,但只是丢弃它。
因此,交换它们

s.nextLine();
word = s.nextLine();

你就完了。还要记住调试器的存在,如果可能的话,尽量使用它们。

相关内容

  • 没有找到相关文章