2016-12-06 153 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啊我明白了。謝謝你的幫助!它非常有意義。 –

相關問題