3

学校のプロジェクトを行っているときに、次の問題が発生しました。processCommand()メソッドからメソッドに行を入力した後run()(コンソールを一種のテキストエディターとして使用)、何らかの理由でトークンが正しく読み取られていないことがわかりました。そのため、コマンドが単純で正確である必要がある場合でも、メソッドの「else」句を実行しprocessCommand()ます(つまり、コンソールにhと入力すると、「有効なコマンドを入力してください」と表示されます)。私が線を分割する方法に何か問題があると確信していますが、私の人生ではそれを理解することはできません。誰か助けてもらえますか?

    @Override
public void run() {
    Scanner scanner = new Scanner(System.in);
    String line;

    try {
        do {
            System.out.print("vi: ");
            line = scanner.nextLine();
            if(line.length() > 0){
                processCommand(line);
            }
        } while (!quit);
    } catch (Exception ex) {
        System.out.println("An error occurred.");
    }

    scanner.close();
    System.out.println("Goodbye!");
}

@Override
public void processCommand(String line) {
    String[] tokens = line.split(" ");
    if(tokens[0] == "b") {
        insertBefore(line.substring(3));
    }
    if(tokens[0] == "i") {
        insertAfter(line.substring(3));
    }
    if(tokens[0] == "m") {
        moveUp(Integer.parseInt(line.substring(3)));
    }
    if(tokens[0] == "u") {
        moveDown(Integer.parseInt(line.substring(3)));
    }
    if(tokens[0] == "r") {
        remove(Integer.parseInt(line.substring(3)));
    }
    if(tokens[0] == "d") {
        remove(Integer.parseInt(line.substring(3)));
    }
    if(tokens[0] == "c") {
        clear();
    }
    if(tokens[0] == "s") {
        try {
            save(line.substring(3));
        } catch (IOException e) {
        }
    }
    if(tokens[0] == "l") {
        try{
            load(line.substring(3));
        } catch (IOException e) {

        }
    }
    if(tokens[0] == "h") {
        displayHelp();
    }
    if(tokens[0] == "x") {
        exit();
    }
    else {
        System.out.println("Please enter a valid command.");
        return;
    }
}
4

2 に答える 2

3

文字列の比較に「==」を使用しないでください。以下を使用してください。

if(tokens[0].equals("h"))...

お役に立てば幸いです。

于 2012-12-04T00:53:41.240 に答える
0

参考までに、switchステートメントを使用した代替バージョンを次に示します(おそらく読みやすいか、入力する文字数が少ない)。

public void processCommand(String line) {
    String[] tokens = line.split(" ");
    if(tokens[0].length() == 0) {
        System.out.println("Please enter a valid command.");
        return;
    }
    switch(tokens[0].charAt(0)) {
        case 'b':  insertBefore(line.substring(3));
                   break;
        case 'i':  insertAfter(line.substring(3));
                   break;
        case 'm':  moveUp(Integer.parseInt(line.substring(3)));
                   break;
        case 'u':  moveDown(Integer.parseInt(line.substring(3)));
                   break;
        case 'r':
        case 'd':  remove(Integer.parseInt(line.substring(3)));
                   break;
        case 'c':  clear();
                   break;
        case 's':  try {
                       save(line.substring(3));
                   } catch (IOException e) { }
                   break;
        case 'l':  try {
                       load(line.substring(3));
                   } catch (IOException e) { }
                   break;
        case 'h':  displayHelp();
                   break;
        case 'x':  exit();
                   break;
        default:   System.out.println("Please enter a valid command.");
    }
}
于 2012-12-04T01:05:16.227 に答える