2015-04-01 2 views
0

Итак, я делаю свое первое объектно-ориентированное программирование, и при попытке и компиляции я прихожу с ошибкой:
winner = rps.pickWinner (userChoice, cpuChoice); // *** Ваш метод ^ required: no arguments found: String, String Причина: фактические и формальные списки аргументов различаются по длине Любая помощь была бы принята с благодарностью.Ошибка: фактические и формальные списки аргументов различаются по длине. Объектно-ориентированное программирование

import java.util.Scanner; 

**strong text**public class KyleAbelWeek10 { 

public static void main(String[] args) { 
    Scanner in = new Scanner(System.in); 
    RockPaperScissors rps = new RockPaperScissors(); //***Your class 

    int numGames = 0; 
    String userChoice = ""; 
    String cpuChoice = ""; 
    String winner = ""; 
    int userWins = 0; 
    int cpuWins = 0; 


    System.out.println("Welcome to Rock, Paper, Scissors!\n"); 

    //Get odd number of games 
    System.out.println("How many rounds would you like to play?"); 
    numGames = in.nextInt(); 

    while (numGames % 2 == 0) //Even number 
    { 
     System.out.println("Sorry, number of games must be odd. Please try again:"); 
     numGames = in.nextInt(); 
    } 

    //Flush the buffer 
    in.nextLine(); 

    //Play the game for the number of rounds the user entered 
    for (int i = 1; i <= numGames; i++) { 
     //Get the user and computer choices 
     userChoice = rps.getUserChoice(); //***Your method 
     cpuChoice = rps.getCPUChoice(); //***Your method 

     System.out.println("Computer chooses " + cpuChoice); 

     //Pick winner 
     winner = rps.pickWinner(userChoice, cpuChoice); //***Your method 

     if (winner.equalsIgnoreCase("Tie")) { 
      System.out.println("It's a tie! Play again."); 
      numGames++; 
     } else { 
      if (winner.equalsIgnoreCase("User")) { 
       userWins++; 
      } else if (winner.equalsIgnoreCase("Computer")) { 
       cpuWins++; 
      } else { 
       System.out.println("Error in picking winner"); 
      } 

      System.out.println(winner + " wins!"); 
     } 

    } //end for 

    //Print results 
    System.out.println("\nUser wins: " + userWins); 
    System.out.println("Computer wins: " + cpuWins); 

    if (userWins > cpuWins) { 
     System.out.println("\nThe user won!"); 
    } 
    if (cpuWins > userWins) { 
     System.out.println("The computer won!"); 
    } 

    //Close game 
    System.out.println("\nThank you for playing!"); 

} //end main 

} 

    import java.util.*; 
public class RockPaperScissors 
{ 
    public String getUserChoice() 
    { 
     //Utility 
     Scanner in = new Scanner(System.in); 
     //Variables 
     String userChoice = ""; 


     System.out.println("Rock, Paper, or Scissors?:"); 
     userChoice = in.nextLine(); 

     while (!userChoice.equalsIgnoreCase("rock") && !userChoice.equalsIgnoreCase("paper") && !userChoice.equalsIgnoreCase("scissors")) 
     { 
      System.out.println("Sorry," + userChoice + " is not a valid entry.Please enter Rock, Paper, or Scissors."); 
      userChoice = in.nextLine(); 

     } 
     return userChoice; 
    } 
    public String getCPUChoice() 
    { 

     //Get Random Number 
     Random r = new Random(); 

     //Variables 
     int randomnumber = 0; 
     String cpuChoice = ""; 

     //Make a random choice 
     randomnumber = r.nextInt(3)+1; 

     if (randomnumber == 1) 
     { 
     cpuChoice = ("rock"); 
     } 
     if (randomnumber == 2) 
     { 
     cpuChoice = ("paper"); 
     } 
     if (randomnumber == 3) 
     { 
     cpuChoice = ("scissors"); 
     } 

     return cpuChoice; 
    } 
    public String pickWinner() 
    { 

     //Variables 
     String winner = ""; 
     String userChoice = ""; 
     String cpuChoice = ""; 

     //Decide who wins the round 

     if (userChoice.equalsIgnoreCase("rock")) 
     { 
      if (cpuChoice.equalsIgnoreCase("scissors")) 
      { 
       winner = ("user"); 
      } 
      else if (cpuChoice.equalsIgnoreCase("paper")) 
      { 
       winner = ("computer"); 
      } 
      else 
      { 
       winner = ("tie"); 
      } 

     } 
     else if (userChoice.equalsIgnoreCase("paper")) 
     { 
      if (cpuChoice.equalsIgnoreCase("scissors")) 
      { 
       winner = ("computer"); 
      } 
      else if (cpuChoice.equalsIgnoreCase("rock")) 
      { 
       winner = ("user"); 
      } 
      else 
      { 
       winner = ("tie"); 
      } 
     } 
     else if (userChoice.equalsIgnoreCase("scissors")) 
     { 
      if (cpuChoice.equalsIgnoreCase("rock")) 
      { 
       winner = ("computer"); 
      } 
      else if (cpuChoice.equalsIgnoreCase("paper")) 
      { 
       winner = ("user"); 
      } 
      else 
      { 
       winner = ("tie"); 
      } 
     }  

     return winner; 
    } 

}

+0

Некоторая терминология: «формальный» список параметров - это список параметров, которые вы пишете, когда вы определяете свой метод. «Фактический» список параметров - это список параметров, которые вы передаете при вызове метода. Если бы вы это знали, смысл сообщения об ошибке компилятора был бы очевиден. Надеюсь, это поможет в следующий раз. – ajb

ответ

0

Ваш RockPaperScissors класс определяет:

public String pickWinner() 

означает, что он не имеет параметров. И все же ваш main называет:

winner = rps.pickWinner(userChoice, cpuChoice); 

Один из них является неправильным и должны быть изменены.


Скорее всего это будет RockPaperScissors функции, так как вы уже есть пользователи и компьютеры выбора перед вызовом. Я хотел бы посмотреть на изменения:

public String pickWinner() 
{ 
    String winner = ""; 
    String userChoice = ""; 
    String cpuChoice = ""; 

в:

public String pickWinner (String userChoice, String cpuChoice) 
{ 
    String winner = ""; 

Для чего это стоит, вы могли бы сделать эту функцию немного более удобным для чтения что-то вроде:

public String pickWinner (String userChoice, String cpuChoice) 
    if (userChoice.equalsIgnoreCase("rock")) { 
     if (cpuChoice.equalsIgnoreCase("scissors")) 
      return "user"; 
     if (cpuChoice.equalsIgnoreCase("paper")) 
      return "computer"; 
     return "tie"; 
    } 

    if (userChoice.equalsIgnoreCase("scissors")) { 
     if (cpuChoice.equalsIgnoreCase("paper")) 
      return "user"; 
     if (cpuChoice.equalsIgnoreCase("rock")) 
      return "computer"; 
     return "tie"; 
    } 

    if (userChoice.equalsIgnoreCase("paper")) { 
     if (cpuChoice.equalsIgnoreCase("rock")) 
      return "user"; 
     if (cpuChoice.equalsIgnoreCase("scissors")) 
      return "computer"; 
     return "tie"; 
    } 

    return "???" 
} 
+0

Это сработало. Спасибо за помощь! – K455306

Смежные вопросы