如何分解方法并对其进行处理

时间:2014-04-10 23:49:54

标签: java arrays

我正在准备下周的考试,我决定在网上寻找一些考试题目,以便做好准备。 我遇到了这个问题,答案是c。但我真的想知道如何或一步一步的过程来回答这样的问题。我遇到困难的部分是试图逻辑地理解int m = mystery(n);一个数字如何等于一个方法?每当我遇到这样的问题时,他们应该先解决一些问题吗?

private int[] myStuff;
 /** Precondition : myStuff contains int values in no particular order.
 /*/ 
 public int mystery(int num)
 {
 for (int k = myStuff.length - 1; k >= 0; k--)
 {
 if (myStuff[k] < num)
 {
 return k;
 }
 }
 return -1;
 }

Which of the following best describes the contents of myStuff after the 
following statement has been executed?
 int m = mystery(n); 

(a) All values in positions 0 through m are less than n.
(b) All values in positions m+1 through myStuff.length-1 are 
less than n.
(c) All values in positions m+1 through myStuff.length-1 are 
greater than or equal to n.
(d) The smallest value is at position m. 
(e) The largest value that is smaller than n is at position m.

4 个答案:

答案 0 :(得分:2)

请参阅此页面以了解方法语法 http://www.tutorialspoint.com/java/java_methods.htm

int m = mystery(n);表示此方法转到return int value,您是assigning that value to a int variable m。所以你的最终结果是m。循环将从数组的结束位置运行到0.当数组的当前位置值小于参数n时,循环将中断。在那一点上它将返回循环的当前位置。现在m =当前循环位置。如果循环的所有值都大于n,它将返回-1,因为如果条件总是失败。

答案 1 :(得分:1)

你明白一种方法是什么吗? 这是非常基本的,方法mystery接收一个int作为参数,并在调用它时返回一个int。 意思是,变量m将被赋予从mystery方法返回的值,并使用n调用它,该值是某个值的int。

答案 2 :(得分:1)

“我遇到的部分是试图从逻辑上理解int m = mystery(n);数字如何等于方法?”

方法可能会也可能不会返回值。不返回值的返回类型为void。方法可以返回原始值(如在您的情况下为int)或任何类的对象。返回类型的名称可以是Java中定义的八种基本类型中的任何一种,任何类的名称或接口。

如果方法未返回值,则无法将该方法的结果分配给变量。

如果方法返回一个值,则调用方法可能会或者可能不会将返回的值存储在变量中的方法中。

答案 3 :(得分:1)

将示例代码放入Java IDE,如Eclipse,Netbeans或IntelliJ,然后在其中一个环境中逐步调试调试器中的代码。

鉴于您刚开始,我将为您提供编译和运行所需的其余代码

public class MysteriousAlright {
    private int[] myStuff;

    public int mystery(int num)
    {
        for (int k = myStuff.length - 1; k >= 0; k--) {
            if (myStuff[k] < num) {
                return k;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        MysteriousAlright ma = new MysteriousAlright();

        ma.setMyStuff(new int[] {4,5,6,7});

        int m  = ma.mystery(5);
        System.out.println("I called ma.mystery(5) and now m is set to " + m);

        m  = ma.mystery(3);
        System.out.println("I called ma.mystery(3) and now m is set to " + m);

        m  = ma.mystery(12);
        System.out.println("I called ma.mystery(12) and now m is set to " + m);
    }

    public void setMyStuff(int[] myStuff) {
        this.myStuff = myStuff;
    }
}

然后,您需要学习如何使用调试器和/或编写简单的单元测试。

一次一行地执行代码并观察变量值的变化将有助于您在此学习环境中。

您可以使用以下两种策略来细分无意义的代码,例如您在此教育中遇到的遗憾代码&#34;教育&#34;上下文。

黑匣子考试策略 暂时忽略神秘功能中的逻辑,我们将功能视为一个我们无法看到的黑盒子。

查看传入的数据,返回的数据。

因此,对于名为mystery的成员函数,我们有

进展是什么? :int num

返回的内容:一个int,所以整数。

有两个地方可以返回数据。

  • 有时会返回k
  • 有时会返回-1

现在我们继续前进。

白盒考试策略

由于代码写得不好,黑盒检查不足以解释其目的。

白盒读取会检查成员函数的内部逻辑(在这种情况下,几乎是for循环)

for循环访问数组中名为myStuff的每个元素,从数组末尾的开始

k是跟踪数组的被访问元素位置的数字。 (注意我们从数组的末尾倒数到0)

如果存储在被访问元素中的数字小于 num(传入),则返回该元素的位置 ..

如果数组的元素都不小于num,则返回-1

所以神秘报道了数组中元素的第一个位置(从数组的末尾开始),其中num大于该元素。