gpt4 book ai didi

java - 我无法掌握如何将变量传入和传出方法

转载 作者:行者123 更新时间:2023-11-30 07:27:27 25 4
gpt4 key购买 nike

我有过程编程背景,需要一些帮助来理解方法如何来回传递变量。这些方法使用显式声明的值,但是当我尝试将值从一种方法传递到另一种方法时,我收到各种“错误:找不到符号”消息。

我怀疑我是 a.) 在错误的地方声明了变量并且它们在方法结束时被清除了或者 b.) 我对变量的发送/返回的编码方式是错误的,或者 c 。) 两个都。更重要的是,虽然我已经阅读了我的教科书和许多在线教程资源,但我仍然无法理解语法应该如何工作。有人可以告诉我吗?

程序:在提供的代码中,我尝试掷五个六面骰子。一种方法掷出一个骰子,另一种方法多次调用该方法并将值写入数组……我认为。

提前致谢,d

public class FiveDice
{
// MAIN METHOD
public static void main(String[] args)
{
// SET VARIABLES FOR DIE HIGH AND LOW VALUES, NUMBER OF DICE TO ROLL
final int LOWEST_DIE_VALUE = 1;
final int HIGHEST_DIE_VALUE = 6;
final int DICE_TO_ROLL = 5;
// ROLL A SINGLE DIE VIA METHOD rollADie()
int roll = rollADie(HIGHEST_DIE_VALUE,LOWEST_DIE_VALUE);
System.out.println("roll " + roll);
}
//
// RETURNS THE RESULT OF A SINGLE DIE ROLL
public static int rollADie(int HIGHEST_DIE_VALUE,int LOWEST_DIE_VALUE)
{
int roll;
roll = ((int)(Math.random()*100)%HIGHEST_DIE_VALUE+LOWEST_DIE_VALUE);
return roll;
}
//
// CALL rollADie TO ROLL DICE_TO_ROLL (above) DICE; RETURN ARRAY OF ROLLED DICE
public static int[] rollTheDice(int DICE_TO_ROLL, int HIGHEST_DIE_VALUE,int LOWEST_DIE_VALUE)
{
int rollNum;
int rolledDie;
for(rollNum=1;rollNum<=DICE_TO_ROLL;rollNum++)
{
int[] rolledDie = new rollADie(HIGHEST_DIE_VALUE,LOWEST_DIE_VALUE)
{
rolledDie
};
return rolledDie[];
}
}

}

最佳答案

老实说,这完全是一团糟(但我们都曾是新手,对吧)?您真正需要做的只是通读有关编写 Java 应用程序的教程,尤其是面向对象的概念,并边学边学。基本的面向对象概念,即方法表示它们所附加的对象的 Action /能力,而不是大多数独立函数/子例程的列表,将真正帮助您了解 OO 编程与函数式编程的不同之处.

我将逐节介绍并尽力帮助您解决问题。

第 1 部分:

// MAIN METHOD
public static void main(String[] args)
{
// SET VARIABLES FOR DIE HIGH AND LOW VALUES, NUMBER OF DICE TO ROLL
final int LOWEST_DIE_VALUE = 1;
final int HIGHEST_DIE_VALUE = 6;
final int DICE_TO_ROLL = 5;

// ROLL A SINGLE DIE VIA METHOD rollADie()
int roll = rollADie(HIGHEST_DIE_VALUE,LOWEST_DIE_VALUE);
System.out.println("roll " + roll);
}

好的,您已经有了一个 main 方法。好的开始。所有 Java 应用程序都需要这个。然而:

  • 您在 main 方法中声明了 final 变量,这并不是真正必要的。在这里删除final关键字,将变量名重新大写为camelCase约定,并将它们作为普通变量传递。
  • 此外,这只是一个风格要点,您声明 lowestDieValue 后跟 highestDieValue,这完全有道理,但随后您将它们传递给 highest首先,然后最低。这感觉有点奇怪和不一致,所以我把它们翻过来了。
  • 最后,您的评论也没有理由全部大写,因此作为另一个风格要点,我将只使用普通大小写。但是,在您的代码中,我认为您的变量和方法名称具有足够的描述性;你真的根本不需要这些评论,所以我把它们去掉了。

所以第 1 部分在这些更改之后应该类似于:

public static void main(String[] args) {
int lowestDieValue = 1;
int highestDieValue = 6;
int diceToRoll = 5;

int roll = rollADie(lowestDieValue, highestDieValue);
System.out.println("roll " + roll);
}

第 2 部分:

  • 如上所述重新排列变量名称,不要使用全部大写 - 按照惯例,所有大写都保留给常量(即 final 变量)。当您将它传递给方法时,它们不是 finals/constants。
  • 此方法过于冗长。它只做一件有用的事情,所以它可以写在一行中。

进行这些更改后,第 2 部分应如下所示:

public static int rollADie(int lowestDieValue, int highestDieValue) {
return ((int)(Math.random()*100)%highestDieValue+lowestDieValue);
}

第 3 部分:

这个方法可以大大简化。我们主要是想完成三件事:

  1. 创建一个数组来存储滚动的骰子值
  2. 通过滚动骰子循环获取值,将每个创建的值存储在数组中
  3. 返回结果int[](整数数组)

你在这个方法中有几个问题,包括在 for 循环中间调用 return 语句(这是可编译的,但在你的技术上是不正确的情况,因为它会导致您的方法提前返回,数组中只有一个值)。

我将完全重写此方法,包括根据上述约定重命名/重新大写您的变量名。重写干净地完成了此方法需要做的 3 件事(如上所述):

public static int[] rollTheDice(int numDiceToRoll, int lowestDieValue, int highestDieValue) {
int[] allDiceRolls = new int[numDiceToRoll];

for(int i = 0; i < allDiceRolls.length; i++) {
allDiceRolls[i] = rollADie(lowestDieValue, highestDieValue);
}

return allDiceRolls;
}

最后:

  • 样式:我一直习惯将开头 { 放在一行的末尾,而不是单独一行,但这只是一种样式。任何一种样式都是有效的,并且在编译时表示相同的意思。
  • 代码:您的类名为“FiveDice”,但您实际上并没有在 main 方法中掷 5 个骰子,也没有调用 rollTheDice 方法。

关于java - 我无法掌握如何将变量传入和传出方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9708765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com