0

メニューオプションがある問題に取り組んでいます。1.単語をシャッフルし、2.シャッフル単語を取得し、配列のインデックス番号を変更して修正しようとします。

私はこの部分をif (input==1)単語をシャッフルしました。

セクション内の同じシャッフル ワードを使用して、if (input==2)修正する必要があります。このブロックで同じ値を使用するにはどうすればよいif(input==1)ですか?

import java.util.Scanner;
import java.io.*;
import java.util.*;

public class Project2 {

    public static void main(String[] args) {
        while (true) {
            System.out.println("Select an item from below: \n");
            System.out.println("(1) Mix");
            System.out.println("(2) Solve");
            System.out.println("(3) Quit");

            int input;
            Scanner scan = new Scanner(System.in);
            input = scan.nextInt();

            String team;
            String mix_word;
            char orig_team[];
            char mix_team[];
            boolean Result;
            // System.out.println(input);
            if (input == 1) {
                team = orig();
                System.out.println(team);

                mix_word = mix(team);
                System.out.println(mix_word);

                orig_team = team.toCharArray();
                mix_team = mix_word.toCharArray();
                int arg_length = mix_team.length;

            }
            if (input == 2) {

            }
            if (input == 3) {
                break;
            }

            if (input > 3 || input <= 0) {

                System.out.println("input accurate numbers 1 or 2 or 3");
            }
        }
    }

    static String mix(String Team) {
        String word = shuffle(Team);
        return word;
    }

    static String shuffle(String input) {
        List<Character> characters = new ArrayList<Character>();
        for (char c : input.toCharArray()) {
            characters.add(c);
        }

        StringBuilder output = new StringBuilder(input.length());
        while (characters.size() != 0) {
            int randPicker = (int) (Math.random() * characters.size());
            output.append(characters.remove(randPicker));
        }

        return output.toString();
    }

    static String orig()

    {
        String[] lines = new String[1000];// Enough lines.
        int counter = 0;
        try {
            File file = new File("input.txt");// The path of the File
            FileReader fileReader1 = new FileReader(file);
            BufferedReader buffer = new BufferedReader(fileReader1);
            boolean flag = true;
            while (true) {
                try {
                    lines[counter] = buffer.readLine();// Store a line in the
                                                        // array.
                    if (lines[counter] == null) {// If there isn't any more
                                                    // lines.
                        buffer.close();
                        fileReader1.close();
                        break;// Stop reading and close the readers.

                    }
                    counter++;

                } catch (Exception ex) {
                    break;
                }
            }

        } catch (FileNotFoundException ex) {
            System.out.println("File not found.");
        } catch (IOException ex) {
            System.out.println("Exception ocurred.");
        }

        int pick;
        Random rand = new Random();
        pick = rand.nextInt(counter) + 0;
        return (lines[pick]);
    }
} 
4

2 に答える 2

2

すべてのループ サイクル (単一のユーザー入力を処理する) で変数を宣言するため、そのスコープ (アクセス範囲) はそのサイクルに限定されます。

while ループの外で変数を宣言すると、そのスコープはループ全体に広がります (メソッドの最後まで)。

public static void main(String[] args) {
    String team = "";
    String mix_word = "";
    char orig_team[] = null;
    char mix_team[] = null;
    boolean Result = false;
    while (true) {
        // ** your usual input handling here **
    }
}

また、必ず初期化してください (たとえば、デフォルト値で)。そうしないと、プログラムがコンパイルされません。

もう 1 つの方法は、メンバー変数またはクラス変数を作成することです。これには、自動初期化とより大きなスコープという利点があります。

于 2013-03-09T22:25:49.530 に答える
1

これはswitchステートメントのかなり病的な使用例ですが、ドロップスルーを利用して次のことを行うことができます。

switch(input) {
case 1:
    team = orig();
    System.out.println(team);

    mix_word = mix(team);
    System.out.println(mix_word);

    orig_team = team.toCharArray();
    mix_team = mix_word.toCharArray();
    arg_length = mix_team.length;

    // No break; here!
case 2:
    //  do the rest of your thing as if it were case 2
    break;
case 3:
    break;
default:
    System.out.println("input accurate numbers 1 or 2 or 3");
}
于 2013-03-09T22:19:57.687 に答える