我正在使用UVA 11877 Coca Cola,这是我的代码:

import java.util.Scanner;

class Main{
  private static Scanner sc;

  public static void main(String[] args) {
    int j;
    Scanner st = new Scanner(System.in);
    int cs = st.nextInt();
    int a = 0;
    int temp = 0;
    while (a < cs) {
      int i = st.nextInt();
      j = freeBottle(i);
      a++;
      free = 0;
      System.out.println(j);
    }
  }

  static int free;

  static int freeBottle(int i) {
    int temp = 0;
    while (i >= 3) {
      temp++;
      i = i - 3;
    }
    free = free + temp;
    int p = temp + i;
    if (p > 2) {
      freeBottle((temp + i));
    }
    if (p == 2) {
      free++;
    }
    return free;
  }
}


当我在UVA上提交它时,它总是返回RuntimeError,在ideone.com上也失败。但是我在Eclipse中没有任何错误。问题是什么?

我在提交中也看到了其他问题。

最佳答案

让我们从一些基本的健康检查开始。当我针对示例输入运行您的代码时,我得到了错误的答案:

// Your code
Scanner st = new Scanner("3\n10\n81\n0");
// Your code



5
40
0



在Eclipse中运行代码时,您是否看到正确的答案(1540)?我怀疑不是-至少不是您发布的代码。

从外观上看,您期望第一行是随后的结果数,这是不正确的。问题说输入内容包括:


  最多10个测试用例,每个测试用例包含一行带有整数n1 <= n <= 100)的行。输入以n = 0结尾,不应对其进行处理。


因此,作为第一步,我建议仔细检查您是否正确读取了输入,并查看了示例输入的预期输出。从那里开始,使用符合上述描述的其他输入进行试验,例如单个1(后接0)和十个100

为了使您入门,这是一个可以正确读取输入的循环(请注意,您应该使用try-with-resources的用法):

try(Scanner in = new Scanner(System.in)) {
  while(in.hasNextInt()) {
    int bottles = in.nextInt();
    if(bottles == 0) {
      break;
    }
    // process bottles
  }
}

08-07 00:30