【问题标题】:Can I stop my program from printing repetitive information我可以停止我的程序打印重复信息吗
【发布时间】:2014-09-19 20:56:02
【问题描述】:

我正在尝试修复我的项目以查找并告诉我哪些学生正在尝试使用其他名称注册,因此我编写了代码来搜索我的数组列表并找到具有相同 ID 号的学生,如下所示,但是否可以更改或添加一些内容,使其不会两次打印出相同的信息
示例测试用例

Student ID 103 is repeating the class as names Mark Wall and Stacy Gwee
Student ID 103 is repeating the class as names Stacy Gwee and Mark Wall



for(int n = 0; n<studentList.size(); n++)
         {
         for(int m = 0; m<studentList.size(); m++)
            {
            if(studentList.get(n).getId().equals(studentList.get(m).getId()) && !studentList.get(n).getName().equals(studentList.get(m).getName()))
               {
               System.out.println("Student ID " + studentList.get(n).getId() + " is repeating the class as names " + studentList.get(n).getName() + " and " + studentList.get(m).getName());
               }
            }
          }

【问题讨论】:

  • 缩短第二个循环。

标签: java if-statement for-loop arraylist system.out


【解决方案1】:

简单的方法:

for(int m = 0 ; m < n ; m++)

或者

for(int m = n + 1 ; m < studentList.size() ; m++)

【讨论】:

【解决方案2】:

要做到这一点,只需更改第二个 for 循环:

for(int m = 0; m < n; m++)

【讨论】:

  • 这非常有效,谢谢!但如果你不介意我问,这究竟是如何工作的,因为两者都为 0,程序不应该从 0 开始运行它!
  • 第一次迭代基本上会阻止您检查第一个条目,因为 ID100 John 肯定等于 ID100 John。然后 n 在那之后增长并开始跟踪检查它之前的所有内容。
【解决方案3】:

这是正确的做法:

  1. 创建地图
  2. 将匹配项添加到地图中
  3. 如果 ID 已被使用,请检查地图,然后再检查您的列表

您需要一些方法来标记您的重复项。您可以创建一个列表或数组来标记这些重复项。然后,您将检查 ID 以确保它之前没有被调用过。

【讨论】:

  • 我觉得OP的课还没上地图呢。
【解决方案4】:

如果您将数组想象为一个宽 n 格、高 m 格的网格,那么您正在查看每个格子。

如果您在网格上画一条对角线,实际上您只需要查看线上方(或下方)的那些。

因此,您的内部循环可以开始,不是从零开始,而是从 n 的值开始。

【讨论】:

  • 对角线本身需要排除。所以它是n+1
猜你喜欢
  • 1970-01-01
  • 2011-04-19
  • 2014-02-20
  • 1970-01-01
  • 1970-01-01
  • 2016-04-28
  • 2021-12-29
  • 2019-02-06
  • 1970-01-01
相关资源
最近更新 更多