1

尽管我在整个网站上进行了研究,但我无法理解这个错误。起初程序运行,但它给了我一个“y”作为一行,验证器的选择是“n”、“n”、“n”。所以,我环顾了一下我的程序,找到了它,解决了它。现在我面临这个actual and format arguments lists differ in length问题。我尝试了各种方法,比如更改变量类型、使用不同的变量……等等。

这是我的代码。

 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package roshambo;

import java.util.Random;
import java.util.Scanner;

/**
 *
 * @author Owner
 */
public class Roshambo {


    private String name;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        String choice = "y";
        String player;

        Scanner sc = new Scanner(System.in);
        Random random = new Random();
        char[] ch = new char[]{'r','p','s'};
        int r = random.nextInt(ch.length);
        char raCh = ch[r];

        while (choice.equalsIgnoreCase("y")) {
            System.out.println("Welcome to Roshambo!");
            System.out.println("");

            //System.out.print("Please enter your name here - ");
            //String player = sc.nextLine();

            String player1 = Validator.getRequiredString("Please enter your name here - ",player);

            String roshambo = sc.nextLine();
            String roshambo1 = Validator.getChoiceString1("Please choose Rock, Paper or Scissors. (R/P/S) - ",'r','p','s');


            choice = getChoiceString("Play Again? (y/n): ","y","n");
            System.out.println("");
        }
    }
    public static String getChoiceString(String prompt, String str1, String str2)
    {
        boolean isValid = false;
        Scanner sc = new Scanner(System.in);
        String choice = "";

        while (isValid == false) {
        System.out.print(prompt);
        choice = sc.next();
        if (choice.equalsIgnoreCase(str1) || choice.equalsIgnoreCase(str2)) {
            isValid = true;

        }
        sc.nextLine();

        }
        return choice;
    }
}

我究竟做错了什么?我还将添加我的验证器代码,因为我认为问题在于这两者之间。

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package roshambo;

import java.util.Scanner;

/**
 * @author Owner
 */
public class Validator {

    // force the user to enter a string
    public static String getRequiredString(String prompt) {
        Scanner sc = new Scanner(System.in);
        String input = "";
        boolean isValid = false;

        while (isValid == false) {
            System.out.print(prompt);
            input = sc.nextLine();
            if (input.equals("")) {
                System.out.println("Error! This entry is required. Try again.");
            }
            else {
                isValid = true;
            }
        }
        return input;
    }
    // force the user to enter one of three strings
    public static String getChoiceString1(String prompt, String str1, String str2, String str3) {
        String input = "";
        boolean isValid = false;

        while (isValid == false) {
            input = getRequiredString(prompt);
            if (input.equalsIgnoreCase(str1) || input.equalsIgnoreCase(str2) || input.equalsIgnoreCase(str3)) {
                isValid = true;
            }
            else {
                System.out.println("Error! Entry must be '"+ str1 +"', '"+ str2 +"', or '"+ str3 +"'. Try again.");  
            }
        }
        return input;
    }
}

在此先感谢您的帮助!

4

1 回答 1

1

您在Validator 类中的getRequiredString 方法需要一个String 参数,您在方法调用中传递了两个参数,String 和一个 Player(但是,您应该收到另一个编译器错误,说找不到播放器,正如您注释掉的那样)。

public static String getRequiredString(String prompt) { // is pnly expecting one String argument.

    String player1 = Validator.getRequiredString("Please enter your name here - ",player);// passing two arguments

只需从您的方法调用中传递提示,错误就会消失。

 String player1 = Validator.getRequiredString("Please enter your name here - ");
于 2012-11-23T06:51:30.903 回答