如何在数组末尾停止递增和描述?

时间:2016-07-15 17:25:02

标签: java android arrays

我是编程的初学者。我想制作一个有3个视图的Android应用程序。

  1. 文字视图(显示文字)和
  2. 按钮(前进和后退)。
  3. 我制作了一个单词one, two, three, four, five来显示。 我将one放在xml上。

    当用户点击FORWARD时,two会再次点击FORWARD时显示three,当用户点击BACK时,会显示two }}。我可以做到这个poit。

    问题是当它到达five并且用户点击FORWARD时,当它到达one并且用户点击BACK时就会崩溃。

    我希望按钮什么也不做,甚至不回到one。我希望用户知道它是列表的末尾。 BACK按钮也存在同样的问题。我希望它留在one。这是我的代码。请帮忙。

    public class aba extends AppCompatActivity {
    
        int i = 0;
        String[] myList = {
            "one",
            "two",
            "three",
            "four",
            "five"
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_aba);
    
            }
            //Incrementing the value by l on forwardButton click
        public void forwardButton(View view) {
                TextView textDisplay = (TextView) findViewById(R.id.textDisplay);
                i = i + 1;
                textDisplay.setText(myList[i]);
                if (i == myList.length) {
                    i = i + 0;
                }
            }
            //decrementing the value by l on backButton click
        public void backButton(View view) {
            TextView textDisplay = (TextView) findViewById(R.id.textDisplay);
            i = i - 1;
            textDisplay.setText(myList[i]);
            if (i == 0) {
                i = i - 0;
            }
    
        }
    }
    

5 个答案:

答案 0 :(得分:1)

数组的索引从0开始。 由于您的数组包含5个元素,因此length的值为5,但索引编号为0,1,2,3,4。

这意味着你不想低于0和高于4。

(另外,没有理由在每次点击按钮时初始化TextView

这样的事情应该有效:

int i = 0;
String[] myList={"one", "two", "three", "four", "five"};
TextView textDisplay;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_aba);

    textDisplay = (TextView) findViewById(R.id.textDisplay);
}

public void forwardButton(View view)  {
    if(i < myList.length - 1) {
        i++;
        textDisplay.setText(myList[i]);
    }

}

public void backButton(View view)  {
    if(i > 0) {
        i--;
        textDisplay.setText(myList[i]);
    }
}

答案 1 :(得分:1)

在实际更改索引值之前,需要检查数组的结尾。此外,由于Java将数组从0索引,因此需要检查索引是否小于数组的长度。

//Incrementing the value by l on forwardButton click
public void forwardButton(View view)  {
    TextView textDisplay = (TextView) findViewById(R.id.textDisplay)

    if (i < myList.length - 1) {
        i=i+1;
    }

    textDisplay.setText(myList[i]);
}
//decrementing the value by l on backButton click
public void backButton(View view)  {
    TextView textDisplay = (TextView) findViewById(R.id.textDisplay);

    if(i > 0) {
        i=i-1;
    }

    textDisplay.setText(myList[i]);
    if(i==0){
        i=i-0;
    }

}

答案 2 :(得分:0)

尝试从越界数组元素设置文本是导致崩溃的原因,因此您需要定位if以确保i在范围内尝试访问之前的myList数组

实际上,您的if语句没有多大帮助。除了违规代码之后,添加或减去0根本不会改变变量,所以它无济于事。

//Incrementing the value by l on forwardButton click
public void forwardButton(View view) {
    TextView textDisplay = (TextView) findViewById(R.id.textDisplay);
    i = i + 1;
    if (i >= myList.length) {
        // myList.length is past the end of the array, so set to length - 1
        i = myList.length - 1;
    }
    textDisplay.setText(myList[i]);
}
//decrementing the value by l on backButton click
public void backButton(View view) {
    TextView textDisplay = (TextView) findViewById(R.id.textDisplay);
    i = i - 1;
    if (i < 0) {
        // -1 is before the beginning of the array, so set to 0 (beginning of the array)
        i = 0;
    }
    textDisplay.setText(myList[i]);
}

答案 3 :(得分:0)

第一个问题是,你的if块中i=i+0 i=i-0没有做任何事情(任何事情)。它的工作原理与数学相同,y=x-0可以缩减为y=x。所以整个if语句就像它不在那里,你可以删除它。

第二个问题是,(我认为)您要撤消之前执行的i=i+1i=i-1,但这已经完成,您无法“撤消指令”。你唯一能做的就是做反向操作,所以在这种情况下i=i-1就是i=i+1。但是,如果您已经将文本加载到字段中并且您将使用索引-1或lenght(比最后一个索引多一个)访问数组,那么就不会改变。所以解决方案是将你的整个方法体放在if语句中并且条件被否定,所以增量和更改只会在你在数组边界内而不是在边上时发生。

编辑:你还需要纠正一个条件。数组从0开始索引,但长度是其中“抽屉”的数量。因此,当您尝试获取len-1元素时,您正在访问数组中的最后一个字段。所以你的条件应该是if(i==myList.length-1),因为i是数组的最后一个可能的索引。

答案 4 :(得分:0)

我认为您应该只检查您点击的按钮是否具有正确的ID:

public void forwardButton(View view) {
    if (view.getId() == R.id.forwardButton) {

    }
    }



            //decrementing the value by l on backButton click
        public void backButton(View view) {
          if (view.getId() == R.id.backwardButton) {
     ...
    }}