对于过早停止循环

时间:2013-10-05 15:49:12

标签: java

我正在尝试解决问题#299 - 在网站UVa在线评判中进行列车交换。我的代码适用于独立的测试用例。但是,当我使用他们提供的示例输入时,我的程序省略了一个测试用例,最后一个更具体:

这是我的代码:

import java.util.Scanner;
public class Tester {
  void problem(){
    Scanner imput = new Scanner(System.in);
    int numT =imput.nextInt();
    int numL, aux, swaps=0;
    int [] train = new int [50];

    for (int i =0; i<numT; i++) {
      numL = imput.nextInt();

      for (int m =0; m< numL; m++) {
        train[m]=imput.nextInt();
      }

      for (int j=0; j<numL; j++) {
        if (train[j]>train[j+1]) {
          for (int k =j; k<numL-1;k++) {
            aux = train[k];
            train[k]=train[k+1];
            train[k+1]=aux;
            swaps++;
          }
        }
      }
      System.out.println("Optimal train swapping takes "+swaps+" swaps.");
      swaps = 0;
    }
  }
}

示例输入:

3
3
1 3 2
4
4 3 2 1
2
2 1

示例输出:

Optimal train swapping takes 1 swaps.
Optimal train swapping takes 6 swaps.
Optimal train swapping takes 1 swaps.

我的代码打印到第二个解决方案,然后由于某种原因停止。我试图调试它并逐步检查发生了什么,但它让我陷入了偏头痛的境地。任何见解都受到高度赞赏。

... 更确切地说,它第二次停在第二次循环而没有任何东西进入数组......我不知道为什么!

我发现的另一件事是,为了解决这个问题,中间情况下的交换次数是6,因此冒泡排序在这里不会有用,因为它会产生超过10个交换因此产生错误的输出,这是然而,与我提出的原始问题不同。我仍然没有弄清楚为什么它第三次绕循环停止,我第三次为数组赋值。 输入包括: 第一行是案件数量。 这条线进入火车的长度:4 这条线输入前车的数量:2 4 3 1 接下来的几行对应于以下测试用例,其结构与示例相同。 他们要求你安排火车,并告诉他们按顺序制作火车的数量。

0 个答案:

没有答案