赤の黒いツリーを作成し、ツリーの赤いノードの割合を決定するプログラムを作成しました。今私はそれのための主要な方法を作っています。私がやろうとしている何入力ループの状態を変更すると入力値の半分がスキップされる
public static void main(String[] args) {
Scanner s;
if (args.length > 0){
try{
s = new Scanner(new File(args[0]));
} catch(java.io.FileNotFoundException e){
System.out.printf("Unable to open %s\n",args[0]);
return;
}
System.out.printf("Reading input values from %s.\n",args[0]);
} else {
s = new Scanner(System.in);
System.out.printf("Enter a list of non-negative integers. Enter a negative value to end the list.\n");
}
RedBlackBST<String, Integer> st = new RedBlackBST<String, Integer>();
int i = 0;
while ((s.hasNextInt())){
int key = s.nextInt();
st.put(key, i);
i++;
}
double percent = percentRed();
System.out.println("There are " + redcount + " red nodes so");
System.out.println(percent + "% of the nodes are red");
}
整数のファイルのいずれかに基づいてツリーを作成(ユーザが「JavaのRedBlackBSTのtest10.txt」と入力してプログラムを実行した場合である:だから、ここで私が今持っているものですツリーに挿入するための10個の値が含まれています)、またはユーザーがファイルを指定していない場合は、ユーザーが自分の値を入力し、最後に負の値を入力してリストを終了するように求めます。あなた自身の値を入力するのは機能しませんが、数字の.txtファイルを渡すと、意図したとおりに正しく動作します。今、独自の値を入力するためとして、私はこのように見えるようにwhileループを変更することを考えていた:
はwhile ((s.hasNextInt()) && (s.nextInt()) >= 0){
だから、これが行うことになっているもの、あなたが負の値をヒットした場合、値のリストを通過していますリスト内で値の読み取りを停止します。この問題は何らかの理由で(たとえファイルを渡しても)整数の配列の値の半分しか読み込まないということです。だから、whileループを変更すると、プログラムは配列の値の半分しか読み込まないようになりましたか?
また、私が呼んでいるput
メソッドは、値をツリーに挿入する挿入メソッドです。
しかし、キーがループの外側に宣言されていて、内部に何もない場合、キーが初期化されていないというエラーが表示されます。 –
@davidmahループの後に何かのために 'key'を使用しようとすると、そのエラーだけが出ます。あなたですか? –
よくwhileループで私は何かにキーが割り当てられていない場合、問題を引き起こす赤い黒のツリーにキーを挿入する私の挿入メソッドを呼び出しています。私は、スキャナの最初の値に割り当てられたキーを取得できればうまくいくと思います。 –