我正在處理Java中的任務,並遇到一個相當獨特的問題。 實質上,我的包中有兩個文件:一個用於測試的驅動程序文件,然後是實際的類文件。我想知道如何從驅動程序/測試文件中調用或執行兩類深層語句? (即我們有公共類Hello,並且在這個類中我們有另一個類聲明爲public class Goodbye。我們希望在Goodbye內執行語句。)Java嵌套類函數
下面是我對類聲明和驅動程序文件的代碼。我試圖執行的功能是InOrder/PostOrder/PreOrder類。我甚至不確定如果使用「public void main(String args [])」是定義此函數的正確方法。如果您有另一種定義函數的方法,我願意接受建議。
驅動程序文件:
package binTreeImprovedTwo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;
/**
* Class TreeTest.
*/
public class TreeTest {
/**
* The main method.
*
* @param default arguments
*/
public static void main (String[] args) {
BufferedReader br = new BufferedReader (new InputStreamReader(System.in));
BinTree tree = new BinTree();
int value;
String loop = "";
Random randomNumber = new Random();
System.out.println("Bulding binary tree...");
for (int i = 1; i <= 10; i++) {
value = randomNumber.nextInt(100);
System.out.printf("%d ", value);
tree.insertNode(tree.root, value);
}
while(loop != "quit"){
System.out.println("\nPlease select a traveral path:");
System.out.println("(Enter the choice in parenthesis EXACTLY)\n");
System.out.println("(inorder)Invokes InOrder Traversal");
System.out.println("(postorder)Invokes PostOrder Traversal");
System.out.println("(preorder)Invokes PreOrder Traversal");
System.out.println("(quit)Quits the Program");
System.out.println("Your choice: ");
try{
loop = br.readLine();
} catch (IOException ioe) {
System.out.println("IO error trying to read your choice!\n");
System.exit(1);
}
System.out.println("\n");
if(loop == "inorder"){
InOrder.main(); //the calls for executing the statements
} else if(loop == "postorder"){
PostOrder.main(); // ''
} else if(loop == "preorder"){
PreOrder.main(); // ''
} else if (loop == "quit");
}
}
}
類聲明:
package binTreeImprovedTwo;
import binTreeImprovedTwo.BinTree.Node;
/**
* Class BinTree.
*/
public class BinTree {
/** The root. */
public Node root = new Node(1111);
/**
* The Class Node.
*/
static class Node{
/** The left. */
Node left;
/** The right. */
Node right;
/** The data. */
int data;
/**
* Instantiates a new node.
*
* @param newData the new data
*/
public Node(int newData){
left = null;
right = null;
this.data = newData;
}
}
/**
* Bin tree.
*/
public void BinTree(){
}
/**
* Insert node.
*
* @param root is the root
* @param value is the value to be inserted
*/
public void insertNode(Node root, int value){
if(root.data == 1111){
root.data = value;
} else if(value < root.data){
if(root.left != null){
insertNode(root.left, value);
} else {
root.left = new Node(value);
}
} else if(value > root.data){
if(root.right != null){
insertNode(root.right, value);
} else {
root.right = new Node(value);
}
}
}
/**
* Super Class traverse.
*
*/
public class Traverse{
public void left(Node root){
if(root != null){
left(root.left);
}
} //end left function
public void print(){
System.out.println(" " + root.data);
} //end of print function
public void right(Node root){
if(root != null){
right(root.right);
}
} //end right function
} //end of class traverse
public class InOrder extends Traverse{
public void main(String args[]){
super.left(root);
super.print();
super.right(root);
}
} //end of InOrder class
public class PostOrder extends Traverse{
public void main(String args[]){
super.left(root);
super.right(root);
super.print();
}
} //end of PostOrder class
public class PreOrder extends Traverse{
public void main(String args[]){
super.print();
super.left(root);
super.right(root);
}
} //end of PreOrder class
}
無關的問題:不要使用==來比較字符串,因爲這個運算符檢查一個變量是否引用與另一個變量完全相同的對象,這是你不感興趣的。相反,您需要知道兩個字符串是否以相同的順序持有相同的字符,並且要使用String方法equals(...)或equalsIgnoreCase(...)。 – 2013-02-24 03:19:56
哦,太棒了。我不知道這些功能是否存在,謝謝! :) – Baelix 2013-02-24 03:22:31
你很受歡迎。 – 2013-02-24 03:22:53