【问题标题】:can someone help me with this code for school?有人可以帮我这个学校代码吗?
【发布时间】:2023-03-06 22:58:01
【问题描述】:

这是我的代码:

for (Article a : articles) {
  boxNumber = magazine.getFfd().searchArticleInBox(a);
  if (boxNumber >= 3) {
    text = text + "Place box " + boxNumber + "\n";
  }   
} 
textArea.append(text);

它确实有效:

Place box 3
Place box 3
Place box 3
Place box 3
Place box 4
Place box 4

这不是我想要的。我希望有人能告诉我当数字改变时我是如何得到它的,所以我得到:

Place box 3
Place box 4

【问题讨论】:

  • 存储最后一个数字并测试doosnummer 是否相同,如果不一样打印出来并更新最后一个数字的值
  • 你能在你的代码中使用英文单词吗?它使我们更容易理解代码。
  • @ThomasBöhm 对于这个琐碎的代码应该无关紧要
  • 有没有可能在3、4之后又来3?

标签: java string for-loop


【解决方案1】:

保留最后一个值并检查它:

int last = 0;
for (Artikel a : artikelen) {
    doosnummer = magazijn.getFfd().zoekArtikelInDoos(a);
    if (doosnummer >= 3) {
        if (last != doosnummer) {
            last = doosnummer;
            text = text + "Plaats doos " + doosnummer + "\n";
        }
    }
}
textArea.append(text);

请注意,将Strings 附加到单个StringBuilder 对象而不是使用String 连接会更有效,后者会不断创建新的String 对象:

StringBuilder text = new StringBuilder();
int last = 0;
for (Artikel a : artikelen) {
    doosnummer = magazijn.getFfd().zoekArtikelInDoos(a);
    if (doosnummer >= 3) {
        if (last != doosnummer) {
            last = doosnummer;
            text.append("Plaats doos ");
            text.append(doosnummer);
            text.append("\n");
        }
    }
}
textArea.append(text.toString());

【讨论】:

    【解决方案2】:

    您必须记住旧号码,并且仅在更改时才打印:

    int oldDoosnummer =0;
    
    for (Artikel a : artikelen){
                doosnummer = magazijn.getFfd().zoekArtikelInDoos(a);
                if (doosnummer >= 3 && doosnummer != oldDoosnummer){
                    text = text + "Plaats doos " + doosnummer + "\n";
                    oldDoosnummer = doosnummer;
                }   
            } textArea.append(text);
    

    【讨论】:

      【解决方案3】:

      试试这个:

      ArrayList<Integer> oldOccurrenceArrayList = new ArrayList<>();
      
      for (Artikel a : artikelen) {
          doosnummer = magazijn.getFfd().zoekArtikelInDoos(a);
      
          if (doosnummer >= 3 && !oldOccurrenceArrayList.contains(doosnummer)) 
          {
              text = text + "Plaats doos " + doosnummer + "\n";
              oldOccurrenceArrayList.add(doosnummer);
          }
      }
      textArea.append(text);
      

      您使用已传递的所有值创建一个ArrayList。这样你就不会得到任何双精度值。

      【讨论】:

      • 是不是有点矫枉过正?
      • 抓不住你... ??
      • 这个实际上更好,因为我们不知道列表是否已排序。
      【解决方案4】:

      试试这个

      for (Artikel a : artikelen) {
            doosnummer = magazijn.getFfd().zoekArtikelInDoos(a);
            String check = "Plaats doos " + doosnummer;
            if (doosnummer >= 3 && text.contains(check)==false) {
             text = text + check + "\n";
             }   
            } 
           textArea.append(text);
      

      【讨论】:

        猜你喜欢
        • 2016-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-26
        • 2021-12-24
        • 1970-01-01
        • 1970-01-01
        • 2015-07-14
        相关资源
        最近更新 更多