2016-12-06 160 views
-2

我正在尝试一些比赛问题,当然,通过他们冲过来没有逻辑来看看我的最快时间。然而,这是我无法去上班的那个...Java如果语句不适用于这种情况?

import java.util.ArrayList; 

import java.util.Scanner;

public class Main { 

    private static Scanner input = new Scanner(System.in); 

    public static void main(String[] args) { 

     ArrayList<Integer> values = new ArrayList<>(); 

     int n = input.nextInt(); 

     for(int i = 0; i < n; i++) { 
      values.add(input.nextInt()); 
     } 

     boolean done = false; 

     while(!done) { 

      System.out.println("Beginning"); 
      for(int i = 0; i < values.size(); i++) { 
       System.out.print(values.get(i) + " "); 
      } 
      System.out.println(); 

      done = true; 

      int changes = 1; 

      while(changes != 0) { 
       changes = 0; 
       for (int i = 0; i < values.size() - 1; i++) { 
        if (values.get(i) == values.get(i + 1)) { 
         values.set(i, values.get(i) * 2); 
         values.remove(i + 1); 
         done = false; 
         changes += 1; 
        } 
       } 
      } 

      System.out.println("Middle"); 
      for(int i = 0; i < values.size(); i++) { 
       System.out.print(values.get(i) + " "); 
      } 
      System.out.println(); 

      changes = 1; 

      while(changes != 0) { 
       changes = 0; 
       for(int i = 1; i < values.size() - 1; i++) { 
        System.out.println("i - 1 " + values.get(i - 1)); 
        System.out.println("i + 1 = " + values.get(i + 1)); 
        if(values.get(i - 1) == values.get(i + 1)) { 
         System.out.println("REACHED"); 
         values.remove(i + 1); 
         values.set(i - 1, values.get(i - 1) * 2 + values.get(i)); 
         values.remove(i); 
         done = false; 
         changes += 1; 
        } 
       } 
      } 

      System.out.println("Final"); 
      for(int i = 0; i < values.size(); i++) { 
       System.out.print(values.get(i) + " "); 
      } 
      System.out.println(); 
     } 

     int max = 0; 

     for(int i = 0; i < values.size(); i++) { 
      int check = values.get(i); 
      if(check > max) { 
       max = check; 
      } 
     } 

     System.out.println(max); 
    } 
} 

,我试图修复代码是它说:“打进”的一部分,尽管的(I - 1)的值和(i + 1)确实等于根据控制台输出,程序不会继续执行if语句后的语句。我的方式有什么错误吗?

仅供参考,这是我正在看的问题。我花了1小时的字面调试。

阿方斯有连续不同大小的N个饭团。他想形成 他的朋友可以吃的最大的饭团。阿方可以 执行以下操作:

  • 如果两个相邻的饭团具有相同的大小,阿方可以将它们结合起来,使一个新的饭团。新饭团的大小是两个旧饭团大小的总和 。它占据了先前被两个旧饭团占据的行 中的位置。
  • 如果两个饭团的大小相同,并且它们之间恰好有一个饭团,那么Alphonse可以将所有三个饭团结合成一个新的饭团。 (中间的米饭团不需要与其他两个大小相同的 大小)。新的米饭团的大小是 三个老米饭团的大小的总和。它占据了之前被三个老式饭团占据的排 中的位置。阿尔方斯可以 执行每个操作多次,因为他想要的。

确定 执行0个或更多操作后,该行中最大的饭团的大小。

输入规范第一行将包含整数N(1≤ N≤400)。下一行将按照从左到右的顺序包含代表米球大小的N空格分隔整数 。 每个整数是至少1且至多1 000 000
- 对于15个可用标记的1,N = 4。
- 对于15个可用标记的额外2,N≤10.
- 对于15个可用标记中的另外5个,N≤50。

输出规格输出最大的米球的尺寸 阿尔方斯可以形成。

+1

好问题,但你可以将它煮成[几行代码](http://stackoverflow.com/help/mcve)而不是倾销这种怪物。 – shmosel

回答

1

尝试:

if(values.get(i - 1).equals(values.get(i + 1))) { 

当你的对象(在这种情况下,整数)上使用==,它会检查,看看他们是否指向同一件事,他们不是实际上是否是相同的值。这就是.equals进来的地方。

+0

整数是对象?我认为整数是原语,字符串是对象。 –

+0

@ImagineDragons在你的ArrayList中使用包装类型(因为只有类允许在泛型中),因此它们是对象 – Li357

+0

@AndrewLi啊我明白了。谢谢你的帮助!它非常有意义。 –

相关问题