【问题标题】:Calling a method in another to populate an array调用另一个方法来填充数组
【发布时间】:2017-01-28 00:08:22
【问题描述】:

首先我想说的是,我已经有几年没有编码了,所以我的知识有点不稳定。我正在寻求一些帮助,基本上是朝着正确的方向前进。 我的任务是完成 FizzBu​​zz 游戏变体的程序,规则是: 输入 1-9 的 2 位数字、一个 Fizz 号码和一个 Buzz 号码(例如:2 7 )

  • 如果 n 可以被 fizzNumber 整除,或者包含数字 fizzNumber,则返回“fizz”
  • 如果n能被buzzNumber整除,或者包含数字buzzNumber,返回“buzz”
  • 但是,如果以上两个条件都为真,则必须返回“fizzbuzz”
  • 如果以上条件都不成立,则返回数字本身。

所以我把那部分记下来了,我的代码如下,它编译正确。

public String getValue(int n) {

boolean fz = false;     //fz will symbolize fizz in my logic
boolean bz = false;    //bz will symbolize buzz in my logic

//if n is divisible by fizzNumber, or contains the digit fizzNumber, return "fizz"
    if(n % fizzNumber == 0 || Integer.toString(n).contains(Integer.toString(fizzNumber)))
    fz = true;

//if n is divisible by buzzNumber, or contains the digit buzzNumber, return "buzz"
    if(n % buzzNumber == 0 || Integer.toString(n).contains(Integer.toString(buzzNumber))) //Check for buzz
    bz = true;

//if both the above conditions are true, you must return "fizzbuzz"
if (fz == true && bz == true)
    return("fizzbuzz");
 //return fizz
    else if (fz == true)
    return("fizz");
//return buzz
    else if(bz == true)
    return("buzz");
// return the number itself as a String
    else
    return Integer.toString(n); 
}

现在我的下一个目标是实现getValues() 方法,以返回给定整数范围的 fizzbuzz 值数组。这个方法应该内部调用getValue()方法来计算单个整数的fizzbuzz值,并将其存储到一个数组中,最后返回。

public String[] getValues(int start, int end) {
        }

例如,如果 fizz 编号为 3,buzz 编号为 4,则 getValues(2,7) 应返回一个字符串数组:

  {"2", "fizz", "buzz", "5", "fizz", 7}

我正在考虑使用类似这样的 for 循环来完成此操作

for(start = 0; end >= start; start ++){

    }

但我真的不知道如何在我的循环中实现 getValue 方法并将其存储在数组中。

谁能帮帮我?

【问题讨论】:

    标签: java fizzbuzz


    【解决方案1】:

    这应该会给你想要的结果。你想先做组合条件,否则永远不会达到。如果该数字可以被两者整除,并且首先到达其他语句之一,则它将始终评估为真,并且永远不会达到组合条件,除非它第一个。

    public String[] getValues(int start, int end) {
        List<String> vals = new ArrayList<>();
    
        for (int i = start; i <= end; i++) {
            if (i % (fizzNumber * buzzNumber) == 0) vals.add("fizzbuzz");
            else if (i % fizzNumber == 0) vals.add("fizz");
            else if (i % buzzNumber == 0) vals.add("buzz");
            else vals.add(i.toString());
        }
    
        return vals.toArray();
    }
    
    
    int fizzNumber = 3;
    int buzzNumber = 5;
    String[] arr = getValues(10, 20);
    // ["buzz", "11", "fizz", "13", "14", "fizzbuzz", "16", "17", "fizz", "19", "buzz"]
    

    【讨论】:

    • 这当然是一种方法,但它不会调用另一种方法。然而,这对于学习如何在运行逻辑时填充数组仍然很有用。感谢回复
    【解决方案2】:

    你几乎完成了你的作业!该函数在下面带有 cmets。

    public String[] getValues(int start, int end) {
        // create the storage list
        List<String> words = new ArrayList<String>();
        for(int i=start; i<=end; i++){
            // append the string to the list
            words.add(getValue(i));
        }
        //return the stored words as String[]
        return words.toArray();
    }
    

    【讨论】:

    • 首先,感谢您的回复。那么,当您输入获取 i 并通过 getValue 方法运行它的 getValue(i) 时?
    • 这个方法会给你编译错误,应该不是正确答案,请看我的答案运行没有任何错误。
    • 是的 @maxbr7t ,确实如此。
    【解决方案3】:
        public String[] getValues(int start, int end) {
            List<String> valueList = new ArrayList<>();
            for (int i = start; i <= end; i++) {
                valueList.add(getValue(i));
            }
            String[] valueArr = new String[valueList.size()];
            valueArr = valueList.toArray(valueArr);
            return valueArr;
        }
    

    【讨论】:

    • 那么当你写 getValue(i) 时,它接受 i 并通过 get value 方法传递它?,
    • 是的,getValue(i) 以 i 作为输入调用您的第一个方法。
    • 除了提供答案之外,如果您能在整个解决方案中解释正在发生的事情和原因,将会很有帮助。这样,人家下一次就不会依赖你了吧? :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 2013-03-16
    • 2020-03-11
    • 1970-01-01
    相关资源
    最近更新 更多