-2

我正在学习 java1001 课程,所以我们不是在做面向对象的编程。我在弄清楚这个关于数组的问题时遇到了麻烦。

给定一个 int 数组,如果它包含 2 或 3,则打印 true。 // {2, 5} -> true // {4, 3} -> true // {4, 5} -> false //

 Scanner keyboard = new Scanner(System.in);
  int size = keyboard.nextInt();
  int[] a = new int[size];

  for(int i = 0 ;i<a.length;i++)
    a[i] = keyboard.nextInt();

  for(int i = 0 ;i<a.length;i++)

    if(a[i] == 2 || a[i] == 3)
    System.out.println(true);

    else
    System.out.println(false);

测试时它产生“truefalse”、“falsetrue”和“falsefalse”如果第一个整数产生 true,我怎样才能让它停止检查整个数组?

有谁能帮助我吗?

提前致谢 :)

4

5 回答 5

1

How can I make it stop examining the entire array if the first integer yields true? If you want to check the first integer in the array alone, you can do something like this:

for(int i = 0; I < a.length; i++)
    if(a[i] == 2 || a[i] == 3)
    {
        System.out.println(true);
        break;
    }

if (i == a.length)
    System.out.println(false);

You can even fit your entire code into a single loop for better performance, at least theoretically. Consider:

Scanner keyboard = new Scanner(System.in);
int size = keyboard.nextInt();
int[] a = new int[size];

int pos = -1;
for(int i = 0; i < a.length; i++)
{
    a[i] = keyboard.nextInt();
    if(pos != -1)
    {
        if((a[i] == 2 || a[i] == 3) && )
        {
            pos = i;
        }
    }
}

if(pos == -1)
{
    System.out.println(false);
}
else
{
    System.out.println(true + " (index = " + pos);
}
于 2013-10-07T12:23:01.517 回答
0

您可以从使用break关键字开始,尽管这不能解决您的问题。

 if(a[i] == 2 || a[i] == 3) {
     System.out.println(true);
     break;
 }

中断有什么作用?

Break 只是停止它在循环中所做的事情。如果您正在循环 afor loop并且不再需要循环,请使用break关键字,它将停止循环。

在这种情况下它将如何工作?

一旦你的循环点击 a2或 a 3,它就会打印出来true。然后它将命中break, 循环结束。

如果遇到其他问题,它将移动到else, 并打印false。然而,这并不是我们所希望的,所以我们将做一些不同的事情。这是伪代码:

boolean b = false;

for( i from 0 to size)
{
    if this is a 2 or a 3
       b = true;
       break;
}

// Print the result.
System.out.println(b);
于 2013-10-07T12:00:56.930 回答
0

您可以使用boolean检查数组是否包含23,例如:

boolean isFound = false;
for(int i = 0 ; i < a.length && !isFound; i++) {
    isFound = a[i] == 2 || a[i] == 3;
}
System.out.println(isFound);
于 2013-10-07T12:09:22.120 回答
0

尝试这个:

int tam = a.length;
for(int i = 0 ;i<tam;i++)
   if(a[i] == 2 || a[i] == 3)
   {
      System.out.println(true);
      tam = -1;
   }
   else if (tam == a.length)
      System.out.println(false);
于 2013-10-07T12:09:35.420 回答
0

我希望下面的事情会对你有所帮助

Scanner keyboard = new Scanner(System.in);
int size = keyboard.nextInt();
int[] a = new int[size];
boolean flag = false;

for(int i = 0 ;i<a.length;i++)
a[i] = keyboard.nextInt();

for(int i = 0 ;i<a.length;i++)

if(a[i] == 2 || a[i] == 3){
flag = true;
break;
}

if(flag)
System.out.println("True");
else
System.out.println("False");
于 2013-10-07T12:10:33.620 回答