亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Java 數組中查找第一個匹配項(僅第一個)

在 Java 數組中查找第一個匹配項(僅第一個)

智慧大石 2021-12-30 16:22:08
我正在做一個課堂作業,我們正在模擬購票程序。在這個我有一個方法應該拖網一個數組并找到第一個匹配項。但是,每行中的第一列作為匹配項返回,而不僅僅是找到的第一列。//Define seatAvailable method/** * seatAvailable method checks to see if a seat is available at the current price * @param x The array of seat prices * @param y The array of seats * @param z The price of the seat requested * @return The number of the seat */public static int seatAvailable(int [][] x, int y [][], int z){  boolean found = false;  int seat = 0;  while (!found)  {    for (int i = 0; i < x.length; i++)    {      for (int j = 0; j < x[0].length; j++)      {        if (z == x[i][j])        {          found = true;          x[i][j] = 0;          seat = y[i][j];          break;        }      }    }  }  return seat;}我不是在尋找代碼,而是在尋找解釋。為什么將多個項目作為匹配項返回?編輯:回應以下:while (!found){  for (int i = 0; i < x.length; i++)  {    for (int j = 0; j < x[0].length; j++)    {       if (z == x[i][j])      {        found = true;        x[i][j] = 0;        seat = y[i][j];        break;      }    }    if (found == true)    {      break;    }  }}return seat;這是我嘗試過的。記錄顯示數組中的多個項目被分配為“0”。編輯#2:我嘗試了很多變化,這是最新的。這個版本的奇怪之處在于它將數組中的 6 個項目(在外部循環/行中)更改為 0 然后停止,即使它們在 . 如果它做到了全部或一項,我會理解,但這讓我感到困惑。我認為最終它可能是執行此操作的主要方法的一部分,因為我嘗試了許多變體來打破機器人行,但無論如何都會發布最后一點:  public static int seatAvailable(int [][] x, int y [][], int z)  {    int seat = 0;    for (int i = 0; i < x.length; i++)      {        for (int j = 0; j < x[0].length; j++)        {          if (z == x[i][j])          {            x[i][j] = 0;            seat = y[i][j];            return seat;          }        }      }    return seat;  }
查看完整描述

2 回答

?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

發生這種情況是因為您的 break 語句只中斷了內循環,而不是外循環,對于每個循環,您都需要一個 break 語句來退出循環,但在您的情況下,這不是必需的并且是臟的。但出于學習目的,我將向您證明:


public static int seatAvailable(int [][] x, int y [][], int z)

{

  boolean found = false;

  int seat = 0;

  while (!found)

  {

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

    {

      for (int j = 0; j < x[0].length; j++)

      {

        if (z == x[i][j])

        {

          found = true;

          x[i][j] = 0;

          seat = y[i][j];

          break;

        }

      }

      if (found) break;

    }

  }

  return seat;

}

現在這將按您的預期工作,當函數找到第一個匹配項時,首先內部循環將被破壞,第二個 if 語句將破壞外部 for 循環。


問題是您可以使用 return 語句立即循環并返回找到的座位,這樣您就不需要任何 break 語句。這個解決方案也使得第一個 while 循環毫無意義,因為兩個 for 循環就足夠了。


希望這可以幫助!



查看完整回答
反對 回復 2021-12-30
?
慕容森

TA貢獻1853條經驗 獲得超18個贊

break 語句將跳出最內層的循環(對于 j)。您假設它脫離了外部 for 循環(for i)。


這是更簡潔的解決方案,它消除了不必要的 while 循環和 break 語句。


注意:在您的代碼中,您有j <= x[0].length. 我覺得應該是j <= x[i].length?


public static int seatAvailable(int [][] x, int y [][], int z)

{

  int seat = 0;


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

  {

    for (int j = 0; j < x[i].length; j++)

    {

      if (z == x[i][j])

      {

        x[i][j] = 0;

        seat = y[i][j];

        return seat;

      }

    }

  }


  return seat;

}


查看完整回答
反對 回復 2021-12-30
  • 2 回答
  • 0 關注
  • 304 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號