簡體   English   中英

Java代碼簡介。 不明白我在做什么錯

[英]intro java coding. don't understand what i'm doing wrong

我真的不確定我的代碼出了什么問題。 它應該通過吸收用戶的選擇,將其與隨機的計算機選擇進行比較並顯示結果來對計算機進行剪刀剪。

我收到兩個錯誤,我沒有第三種和第四種方法的返回語句。 另外,當我運行它而沒有解決錯誤時,從第60行開始的嵌套if語句僅打印出兩個println語句之一,這對我來說實際上是零。

import java.util.Random;
import java.util.Scanner;
public class Chapter5ProjectPart2 {

    public static void main(String[] args) {

    Random generator = new Random();
    Scanner keyboard = new Scanner(System.in);

    int userNum;
    int compNum;
    String userChoice = "";
    String compChoice = "";
    int rnum;
    int result = 0;
    boolean keepPlaying;
    int input = 1;


    do
    {   
        compNum = generator.nextInt(2)+1;
        compChoice = numToChoice(compNum);

        menu();

        userNum = keyboard.nextInt();
        userChoice = numToChoice(userNum);
        keyboard.nextInt();

        System.out.println();
        System.out.println("you chose " + userChoice);
        System.out.println("the computer chose " + compChoice);

        result = resultCheck(userNum, compNum);


        if (result == 1) // user wins
        {
            if (userNum == 1) //user won choosing rock
            {
                System.out.println("rock beats scissors");
                System.out.println("you win");
            }
            else if (userNum == 2) //user won choosing paper
            {
                System.out.println("paper beats rock");
                System.out.println("you win");
            }
            else if (userNum == 3)  //user won choosing scissors
            {
                System.out.println("scissors beats paper");
                System.out.println("you win");
            }
        }
        else if (result == 3) //user loses
        {
            if (userNum == 1)  //user lost choosing rock
            {
                System.out.println("paper beats rock");
                System.out.println("you lose");
            }
            else if (userNum == 2)  //user lost choosing paper
            {
                System.out.println("scissors beats paper");
                System.out.println("you lose");
            }
            else if (userNum == 3)  //user lost choosing scissors
            {
                System.out.println("rock beats scissors");
                System.out.println("you lose");
            }
        else if (result == 2) //draw
            System.out.println("draw");
        }

        System.out.println("would you like to play again?");
        System.out.println("1 = yes");
        System.out.println("2 = no");
        input = keyboard.nextInt();
        keepPlaying = play(input);

    } while (keepPlaying == true);

}


// method 1 (menu)
public static void menu()
{
System.out.println("Enter your choice of rock, paper, or scissors\n" + "1 = rock\n" + "2 = paper\n" + "3 = scissors");
}

// method 2 (result check)
public static int resultCheck(int userNum, int compNum)
{
    if (userNum == 2 && compNum == 1)
        return 1;
    else if (userNum == 1 && compNum == 3)
        return 1;
    else if (userNum == 3 && compNum == 2)
        return 1;
    else if (userNum == compNum)
        return 2;
    else
        return 3;
}

// method 3 (converting number choice to rock/paper/scissors
public static String numToChoice(int num)
{
    if (num == 1)
        return "rock";
    else if (num == 2)
        return "paper";
    else if (num == 3)
        return "scissors";
}

//method 4 (play again)
public static boolean play(int input)
{
    if (input == 1)
        return true;
    else if (input == 2)
        return false;
}


}

我收到兩個錯誤,我沒有第三種和第四種方法的返回語句。

對。 讓我們看第三點:

public static String numToChoice(int num)
{
    if (num == 1)
        return "rock";
    else if (num == 2)
        return "paper";
    else if (num == 3)
        return "scissors";
}

假設num不是1、2 3? 那么該方法的返回值應該是什么? 這就是為什么出現錯誤的原因,您需要最后一個else (沒有if )來說明當較早的分支都沒有返回值時返回值應該是什么。 沒有它,該方法將導致編譯時錯誤。

另外,當我運行它而沒有解決錯誤時,從第60行開始的嵌套if語句僅打印出兩個println語句之一,這對我來說實際上是零。

不能在未修復錯誤的情況下運行它,因為這些是編譯時錯誤。 如果嘗試使用適當的錯誤來編譯此源代碼,則它將失敗,並且您不會獲得更新的類文件。 因此,如果您隨后嘗試運行並且似乎可以正常運行,則說明正在運行這些錯誤出現之前編譯的類文件的較早版本。 該類文件與當前源代碼無關,因此可以理解,這對您沒有意義。 您沒有查看JVM在運行什么。

如果您對方法進行了糾正以使事物能夠編譯(通過添加最終的elseif沒有, if )),然后運行已編譯的結果,則事物應該更有意義。 同時,您可能想要刪除以前的Chapter5ProjectPart2.class文件,因為它已過時。

public static String numToChoice(int num)
{
    if (num == 1)
        return "rock";
    else if (num == 2)
        return "paper";
    else if (num == 3)
        return "scissors";
}

//method 4 (play again)
public static boolean play(int input)
{
    if (input == 1)
        return true;
    else if (input == 2)
        return false;
}

這些方法應始終返回某些內容。 例如,方法3,如果int num為4,則不會返回任何內容。 通過添加以下內容解決此問題:

else return "";

那是因為您沒有以else子句結束方法3和4中的else-if語句。

您確實缺少return語句。 Java希望非void方法始終返回一個值或引發異常。 使非空方法結束而不返回或引發異常是一個錯誤。

public static String numToChoice(int num)
{
    if (num == 1)
        return "rock";
    else if (num == 2)
        return "paper";
    else if (num == 3)
        return "scissors";
}

在這里,如果num不是1、2或3,則您的方法不會返回任何內容。

public static boolean play(int input)
{
    if (input == 1)
        return true;
    else if (input == 2)
        return false;
}

在這里,非1或2的輸入缺少return語句。

首先,切勿運行無法編譯的代碼。

第二:檢查此方法:

public static boolean play(int input)
{
    if (input == 1)
        return true;
    else if (input == 2)
        return false;
}

如果輸入為6,-67或789,該方法將返回什么? 您沒有告訴,編譯器也無法猜測。 因此它拒絕編譯,直到您告訴它們在這些情況下要返回什么。

如果其他情況永遠不會發生,請拋出異常:

public static boolean play(int input)
{
    if (input == 1)
        return true;
    else if (input == 2)
        return false;
    else {
        throw new IllegalStateException("input is " + input + ". Something's really wrong");
    }
}

Java方法必須返回一個值,除非它聲明void為return。

在您的play方法中,如果input不是1或2,則Java不會返回任何值。 這不允許在Java中進行編譯。

numToChoice方法中,如果num不是1、2或3,則Java將不返回任何值。 這不允許在Java中進行編譯。

在“意外”情況下添加一個else返回值,並允許Java進行編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM