Java 如果在数组中某个值旁边,则减少数组中某个数字的值

Java 如果在数组中某个值旁边,则减少数组中某个数字的值,java,arrays,Java,Arrays,我的代码假设取一个数组,如果数组中的数字靠近零,则将其值减少一半。我试图修复代码中的一个错误,如果数组中的数字靠近零,并且零位于数组中的第一个或最后一个位置,那么它将无法正确减少数组中的数字。我希望我的代码输出以下内容: Day 0: {0,6,7,9,3,5,6,1} Day 1: {0,3,7,9,3,5,6,1} Day 2: {0,1,7,9,3,5,6,1} Day 3: {0,0,7,9,3,5,6,1} Day 4: {0,0,3,9,3,5,6,1} Day 5: {0,0,1,

我的代码假设取一个数组,如果数组中的数字靠近零,则将其值减少一半。我试图修复代码中的一个错误,如果数组中的数字靠近零,并且零位于数组中的第一个或最后一个位置,那么它将无法正确减少数组中的数字。我希望我的代码输出以下内容:

Day 0: {0,6,7,9,3,5,6,1}
Day 1: {0,3,7,9,3,5,6,1}
Day 2: {0,1,7,9,3,5,6,1}
Day 3: {0,0,7,9,3,5,6,1}
Day 4: {0,0,3,9,3,5,6,1}
Day 5: {0,0,1,9,3,5,6,1}
Day 6: {0,0,0,4,3,5,6,1}
Day 7: {0,0,0,2,3,5,6,1}
Day 8: {0,0,0,1,3,5,6,1}
Day 8: {0,0,0,0,1,5,6,1}
Day 9: {0,0,0,0,0,5,6,1}
Day 10: {0,0,0,0,0,2,6,1}
Day 11: {0,0,0,0,0,1,6,1}
Day 12: {0,0,0,0,0,0,6,1}
Day 13: {0,0,0,0,0,0,3,1}
Day 14: {0,0,0,0,0,0,1,1}
Day 15: {0,0,0,0,0,0,0,1}
Day 16: {0,0,0,0,0,0,0,1}
Day 17: {0,0,0,0,0,0,0,0}
---extinct---
但是,它会输出以下内容:

Day 295279: 0, 0, 7, 9, 3, 5, 6, 1.
Day 295280: 0, 0, 7, 9, 3, 5, 6, 1.
Day 295281: 0, 0, 7, 9, 3, 5, 6, 1.
Day 295282: 0, 0, 7, 9, 3, 5, 6, 1.
Day 295283: 0, 0, 7, 9, 3, 5, 6, 1.
Day 295284: 0, 0, 7, 9, 3, 5, 6, 1.
Day 295285: 0, 0, 7, 9, 3, 5, 6, 1.
它不断重复到无限远,我不知道为什么会发生。这是我的密码:

public class Final {
public static void main(String[] args) {
 int[] settlement = {0,6,7,9,3,5,6,1};

 int daycont=0;
 System.out.println("Day 0: "+settlement[0]+", "+settlement[1]+", "+settlement[2]+", "+settlement[3]+", "+settlement[4]+", "+settlement[5]+", "+settlement[6]+", "+settlement[7]+".");
 while(settlement[0]!=0 || settlement[1]!=0 ||settlement[2]!=0 || settlement[3]!=0 || settlement[4]!=0 || settlement[5]!=0 || settlement[6]!=0 || settlement[7]!=0) { 
  daycont++;
 for (int i=0; i<7; i++) {
  if (settlement[i]==0) {
   if(i!=7){
   i++;
   settlement[i]= settlement[i]/2;}
   if(i!=1 && i!=0)
   i=i-2;
   settlement[i]= settlement[i]/2;
   i++;
  }
 }

 System.out.println("Day "+daycont+": "+settlement[0]+", "+settlement[1]+", "+settlement[2]+", "+settlement[3]+", "+settlement[4]+", "+settlement[5]+", "+settlement[6]+", "+settlement[7]+".");
 }

for (int extcounter=0; extcounter<8; extcounter++) {
 if (settlement[extcounter]==0) {
  extcounter++;
  if (extcounter==8)
   System.out.println("----EXTINCT----");

 }

}}
}
公开课期末考试{
公共静态void main(字符串[]args){
int[]结算={0,6,7,9,3,5,6,1};
int daycont=0;
System.out.println(“第0天:“+结算[0]+”、“+结算[1]+”、“+结算[2]+”、“+结算[3]+”、“+结算[4]+”、“+结算[5]+”、“+结算[6]+”、“+结算[7]+”);
而(结算[0]!=0 |结算[1]!=0 |结算[2]!=0 |结算[3]!=0 |结算[4]!=0 |结算[5]!=0 |结算[6]!=0 |结算[7]!=0){
daycont++;

对于(inti=0;i我认为这应该能够完成任务

for(i=0;i<7;i++)
 {
      if(i<6&& settlement[i]==0 && settlement[i+1]>0)
      {
            settlement[i+1]=settlement[i+1]/2;
      }
}
对于(i=0;i请尝试以下操作:

for (int i = 0; i < settlement.length; i++) {

            if (settlement[i] == 0) {
                if (i != settlement.length - 1) {
                    settlement[i + 1] = settlement[i + 1] / 2;
                }
                if (i != 0) {
                    settlement[i - 1] = settlement[i - 1] / 2;

                }
            }
        }
for(int i=0;i
在debugger下一步一步地运行代码,并将实际值与预期值进行比较。更不用说,我只是使用以下数组运行原始代码:{3,6,7,0,3,5,6,1};而不是使用{0,6,7,9,3,5,6,1},sorryOkay,是的,只要0不在数组中的第一个或最后一个位置,代码就会工作。如果您知道如何在0位于数组中的第一个或最后一个位置时使其工作,请告诉我。:DIt在0位于第一个位置时工作,但是如果零位于数组中的最后一个位置,我会得到以下消息:第10天,第3天,第1天,第10天,第3天,第2天,第4天,第0天重复无穷大。我想我可以使用你编写的代码,并使其适用于最后一个数字。如果你找到了使代码起作用的代码,如果0是数组中的最后一个数字,请发布它。谢谢:D这一个有效!非常感谢你,这几天来我一直被难住了!:D