新手遇到阵列问题

时间:2017-01-27 01:16:26

标签: java arrays sorting

我自己一直在研究Java几周,但我已经完全陷入了我在网上找到的一个挑战问题。我一直在搜索谷歌,看看有没有人问过它,但我似乎找不到任何东西。由于我没有任何老师,我想知道StackOverflow上是否有人可以帮助我。

我的一个方法存在问题,因为它一直使我的测试用例失败,而且我不确定究竟是什么导致它出错。

基本上,如果我输入像[2,8,3,9,7]这样的数组,我希望它像[2,3,7,8,9]那样输出。然而,由于这里编写的方法写得不好,我一直在开始时得到额外的元素,这导致[2,2,3,7,8,9]。我使用此方法的具体目标是查找并返回一个数组,其中包含大于/等于" high"小于/等于"低" ,包括重复。此数组的长度应与'范围'中的元素数相同,因此方法名称。

我只是想正确地指向我应该采取的下一步,以消除这个第一个元素问题。我知道代码可能很糟糕,所以请耐心等待。

谢谢;所有的帮助表示赞赏!

auth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(SignupActivity.this, new OnCompleteListener<AuthResult>()
    {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            progressBar.setVisibility(View.GONE);
            // If sign in fails, display a message to the user. If sign in succeeds
            // the auth state listener will be notified and logic to handle the
            // signed in user can be handled in the listener.
            if (!task.isSuccessful())
            {
                new MaterialStyledDialog.Builder(context)
                .setHeaderDrawable(R.drawable.oh_snap)
                .withDialogAnimation(true)
                .setTitle("Oh Snap!")
                .setDescription("Authentication failed. " + task.getexception())
                .setPositiveText("Try Again")
                .onPositive(new MaterialDialog.SingleButtonCallback()
                    {
                        @Override
                        public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which)
                        {
                            //TODO: Clear text fields.
                        }
                    })
                    .show();
            }

}

1 个答案:

答案 0 :(得分:2)

如果我正确阅读了您的规范,您将获取一个输入数组a,以及两个值lowhigh。您必须返回一个新数组,其中只包含(包含)lowhigh之间的元素。

您没有按任何顺序编写元素的顺序(除了在测试用例中元素按升序排序)。注意:如果需要,您可以轻松添加sort()方法。

主要问题是您必须确定返回数组的大小。有很多方法可以做到这一点。为简单起见,我将在两个循环中完成。

public static int[] range( int[] a, int low, int high) {
  int result_size=0;
  int i, j;
  // determine result size
  for (i=0; i< a.length;i++) {
    if ((low <= a[i]) && (a[i] <= high)) result_size++;
  }
  // build the result array
  int [] result = new int[result_size];
  j = 0;   // destination
  for (i = 0; i < a.length; i++) {
    if ((low <= a[i]) && (a[i] <= high)) {
      result[j] = a[i];
      j++;
    }
  }
  return result;
}