我正在尝试一些比赛问题,当然,没有逻辑地冲过他们看我最快的时间。但是,这是我无法开始工作的那个......
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);
}
}
我尝试修复的代码是它所说的&#34; REACHED&#34;的部分,即使(i-1)和(i + 1)的值确实等于在控制台输出中,程序不会继续执行if语句之后的语句。我做的方式是否有错误?
仅供参考,这是我正在考虑的问题。我花了1个小时调试。
Alphonse有N个不同大小的饭团。他想成立 最大的饭团可供他的朋友吃。阿方斯可以 执行以下操作:
- 如果两个相邻的饭团大小相同,Alphonse可以将它们组合成一个新的饭团。新饭团的大小是其中的总和 两个旧饭团的大小。它占据了行中的位置 以前被两个老饭团占据。
- 如果两个饭团大小相同,并且它们之间只有一个饭团,Alphonse可以将所有三个饭团结合起来制作一个饭团 新饭团。 (中间饭团不需要相同 大小与另外两个相同。)新饭团的大小是其中的总和 三个老饭团的大小。它占据了行中的位置 以前被三个老饭团占据。阿方斯可以 根据自己的意愿多次执行每项操作。
确定之后最大的饭团的大小 执行0或更多操作。
输入规范第一行将包含整数N(1≤ N≤400)。下一行将包含N个空格分隔的整数 代表稻球的大小,从左到右依次排列。 每个整数至少为1且最多为1 000 000 - 对于15个可用标记中的1个,N = 4 - 对于15个可用标记中的另外2个,N≤10 - 对于15个可用标记中的另外5个,N≤50。
输出规格输出最大的饭团的大小 阿尔方斯可以形成。
答案 0 :(得分:1)
尝试:
if(values.get(i - 1).equals(values.get(i + 1))) {
当你在对象上使用==(在这种情况下是整数)时,它会检查它们是否指向同一个东西,而不是它们是否实际上是相同的值。这就是.equals的用武之地。
答案 1 :(得分:0)
当你在任何arrayList上尝试get方法时,返回类型总是Object.However你可以将它转换为原始int int value = arrayList.get(index);然后你可以比较。这称为拆箱对象。请参考教程 https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html