从 'full' 数组中删除元素
Removing elements from a 'full' array
这是我正在做的一个小作业。我是初学者 Java 程序员,在这个小程序中遇到了 运行 问题。由于某种原因,如果数组包含 10 个元素,则删除方法不起作用。我希望 advice/help 能解决这个问题。
当数组包含 10 个元素时,我试图删除一个,textArea 中元素的 ar运行gement 不是它应该的。一切都应该超过1,包含9个元素,最后一个元素为0。当删除一个元素时,所有元素都应该自行调整并向左移动。
输出的默认外观运行ce是:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
如果我输入数字 1 - 10,输出应该如下所示:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
如果用户尝试删除最后一个元素,它会将其设置为 0:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
但是,如果用户试图删除另一个元素,比如说 5,程序会在控制台中抛出越界异常。如果他们删除 5,输出应该是:[1, 2, 3, 4, 6, 7, 8, 9, 10, 0]
有关更多上下文,这里是作业详细信息:
Create a complete program that has the ability to store and display integer values in an array. The maximum number of values that your program should be able to handle is 10.
- Add additional elements to the array using screen input (textbox and button).
- Remove array elements based on screen input (textbox and button).
- List all of the elements in the array and compute the sum of all the elements.
- List the even elements in the array and compute the sum of the even elements.
- List the odd elements in the array and compute the sum of the odd elements.
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
public class SumElement implements ActionListener {
public static JButton add, remove, sumAll, sumEven, sumOdd;
public static JTextField inputField;
public static JTextArea textArea;
public static int counter = 0;
public static int[] numbers = new int[10];
public static JLabel titleText;
public static void main(String[] args) {
System.out.println("Counter: " + counter);
// Frame
JFrame frame = new JFrame("Integer Sums");
frame.setSize(178, 240);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Container panel
JPanel container = new JPanel();
container.setLayout(new BoxLayout(container, BoxLayout.PAGE_AXIS));
frame.setContentPane(container);
// Title panel
JPanel titlePane = new JPanel();
titleText = new JLabel("Integer Sums");
// Content panel
JPanel content = new JPanel();
content.setPreferredSize(new Dimension(300, 180));
content.setLayout(null);
// Buttons
add = new JButton("Add");
add.setBounds(4, 50, 80, 20);
add.addActionListener(new SumElement());
remove = new JButton("Remove");
remove.setBounds(88, 50, 80, 20);
remove.addActionListener(new SumElement());
sumAll = new JButton("Sum All");
sumAll.setBounds(4, 74, 164, 20);
sumAll.addActionListener(new SumElement());
sumEven = new JButton("Sum Even");
sumEven.setBounds(4, 98, 164, 20);
sumEven.addActionListener(new SumElement());
sumOdd = new JButton("Sum Odd");
sumOdd.setBounds(4, 122, 164, 20);
sumOdd.addActionListener(new SumElement());
// Text area, and text field
inputField = new JTextField();
inputField.setBounds(4, 21, 164, 25);
JLabel inputLabel = new JLabel("Input integer value below:");
inputLabel.setBounds(12, 6, 164, 13);
textArea = new JTextArea();
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setBounds(4, 144, 165, 36);
// Adding everything
container.add(titlePane);
titlePane.add(titleText);
container.add(content);
content.add(inputLabel);
content.add(inputField);
content.add(scrollPane);
content.add(add);
content.add(remove);
content.add(sumAll);
content.add(sumEven);
content.add(sumOdd);
// Extras
frame.toFront();
frame.setVisible(true);
}
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equals("Add")) {
if (counter == 10) {
titleText.setText("Error: too many values");
} else {
numbers[counter] = Integer.parseInt(inputField.getText());
textArea.setText(Arrays.toString(numbers));
counter++;
}
System.out.println("Counter: " + counter);
} else if (event.getActionCommand().equals("Remove")) {
for (int i = 0; i < counter; i++) {
if (Integer.parseInt(inputField.getText()) == numbers[i]) {
for (int x = i; x < counter - 1; x++) {
numbers[x] = numbers[x + 1];
}
textArea.setText(Arrays.toString(numbers));
counter--;
} else {
titleText.setText("Error: value doesn't exist");
}
}
System.out.println("Counter: " + counter);
} else if (event.getActionCommand().equals("Sum All")) {
int sum = 0;
for (int i = 0; i <= counter; i++) {
sum += numbers[i];
}
titleText.setText("Sum is " + sum);
} else if (event.getActionCommand().equals("Sum Even")) {
int sum = 0;
for (int i = 0; i <= counter; i++) {
if (numbers[i] % 2 == 0) {
sum += numbers[i];
}
}
titleText.setText("Sum of even values is: " + sum);
} else if (event.getActionCommand().equals("Sum Odd")) {
int sum = 0;
for (int i = 0; i <= counter; i++) {
if (numbers[i] % 2 != 0) {
sum += numbers[i];
}
}
titleText.setText("Sum of odd values is: " + sum);
}
}
}
下面是代码的修改后的 actionPerformed 部分。现在可以删除最后一个数组值。但是,如果数组已满,并且用户试图删除最后一个元素以外的元素,则会抛出错误。我仍然不确定如何修复此错误。
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equals("Add")) {
if (counter == 10) {
titleText.setText("Error: too many values");
} else {
numbers[counter] = Integer.parseInt(inputField.getText());
textArea.setText(Arrays.toString(numbers));
counter++;
}
System.out.println("Counter: " + counter);
} else if (event.getActionCommand().equals("Remove")) {
if (Integer.parseInt(inputField.getText()) == numbers[9]) {
numbers[9] = 0;
counter--;
textArea.setText(Arrays.toString(numbers));
} else {
for (int i = 0; i < counter; i++) {
if (Integer.parseInt(inputField.getText()) == numbers[i]) {
for (int x = i; x <= counter - 1; x++) {
numbers[x] = numbers[x + 1];
}
textArea.setText(Arrays.toString(numbers));
counter--;
}
}
}
System.out.println("Counter: " + counter);
} else if (event.getActionCommand().equals("Sum All")) {
int sum = 0;
for (int i = 0; i <= counter; i++) {
sum += numbers[i];
}
titleText.setText("Sum is " + sum);
} else if (event.getActionCommand().equals("Sum Even")) {
int sum = 0;
for (int i = 0; i <= counter; i++) {
if (numbers[i] % 2 == 0) {
sum += numbers[i];
}
}
titleText.setText("Sum of even values is: " + sum);
} else if (event.getActionCommand().equals("Sum Odd")) {
int sum = 0;
for (int i = 0; i <= counter; i++) {
if (numbers[i] % 2 != 0) {
sum += numbers[i];
}
}
titleText.setText("Sum of odd values is: " + sum);
}
}
}
问题应该出在这段代码中:
for (int x = i; x <= counter - 1; x++) {
numbers[x] = numbers[x + 1];
}
则数组包含10个元素变量counter为10。
在这种情况下,迭代将计算 -1,即 9。在下一行中,您尝试获取“numbers[x + 1]”,即 10[(x=9)+1],因此超出范围.
如果将它更改为计数器 -2 而不是 -1 它应该可以工作,因为 atm 你从下一个字段中获取元素来填充它应该仍然工作的位置。
下面的代码应该正确删除整数值(如果存在)。但是,它不处理数组中存在多个相同整数值的情况(即数组有 1,1,1,1,1,1,1,0,0,0 并尝试删除 1)。它不会删除所有 1 并在文本框中显示所有 0。
我不确定要求是否在数组中具有唯一值。如果是这种情况,应该更改 add 函数来处理这种情况。
else if (event.getActionCommand().equals("Remove")) {
boolean removed = false;
titleText.setText("Integer Sums");
for (int i = 0; i < counter; i++) {
if (Integer.parseInt(inputField.getText()) == numbers[i]) {
for (int x = i; x < counter; x++) {
if (x == 9) {
numbers[x] = 0;
} else {
numbers[x] = numbers[x + 1];
numbers[x + 1] =0;
}
}
textArea.setText(Arrays.toString(numbers));
counter--;
removed = true;
}
}
if (!removed) {
titleText.setText("Error: value doesn't exist");
}
System.out.println("Counter: " + counter);
}
这是我正在做的一个小作业。我是初学者 Java 程序员,在这个小程序中遇到了 运行 问题。由于某种原因,如果数组包含 10 个元素,则删除方法不起作用。我希望 advice/help 能解决这个问题。
当数组包含 10 个元素时,我试图删除一个,textArea 中元素的 ar运行gement 不是它应该的。一切都应该超过1,包含9个元素,最后一个元素为0。当删除一个元素时,所有元素都应该自行调整并向左移动。
输出的默认外观运行ce是:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
如果我输入数字 1 - 10,输出应该如下所示: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
如果用户尝试删除最后一个元素,它会将其设置为 0: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
但是,如果用户试图删除另一个元素,比如说 5,程序会在控制台中抛出越界异常。如果他们删除 5,输出应该是:[1, 2, 3, 4, 6, 7, 8, 9, 10, 0]
有关更多上下文,这里是作业详细信息:
Create a complete program that has the ability to store and display integer values in an array. The maximum number of values that your program should be able to handle is 10.
- Add additional elements to the array using screen input (textbox and button).
- Remove array elements based on screen input (textbox and button).
- List all of the elements in the array and compute the sum of all the elements.
- List the even elements in the array and compute the sum of the even elements.
- List the odd elements in the array and compute the sum of the odd elements.
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
public class SumElement implements ActionListener {
public static JButton add, remove, sumAll, sumEven, sumOdd;
public static JTextField inputField;
public static JTextArea textArea;
public static int counter = 0;
public static int[] numbers = new int[10];
public static JLabel titleText;
public static void main(String[] args) {
System.out.println("Counter: " + counter);
// Frame
JFrame frame = new JFrame("Integer Sums");
frame.setSize(178, 240);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Container panel
JPanel container = new JPanel();
container.setLayout(new BoxLayout(container, BoxLayout.PAGE_AXIS));
frame.setContentPane(container);
// Title panel
JPanel titlePane = new JPanel();
titleText = new JLabel("Integer Sums");
// Content panel
JPanel content = new JPanel();
content.setPreferredSize(new Dimension(300, 180));
content.setLayout(null);
// Buttons
add = new JButton("Add");
add.setBounds(4, 50, 80, 20);
add.addActionListener(new SumElement());
remove = new JButton("Remove");
remove.setBounds(88, 50, 80, 20);
remove.addActionListener(new SumElement());
sumAll = new JButton("Sum All");
sumAll.setBounds(4, 74, 164, 20);
sumAll.addActionListener(new SumElement());
sumEven = new JButton("Sum Even");
sumEven.setBounds(4, 98, 164, 20);
sumEven.addActionListener(new SumElement());
sumOdd = new JButton("Sum Odd");
sumOdd.setBounds(4, 122, 164, 20);
sumOdd.addActionListener(new SumElement());
// Text area, and text field
inputField = new JTextField();
inputField.setBounds(4, 21, 164, 25);
JLabel inputLabel = new JLabel("Input integer value below:");
inputLabel.setBounds(12, 6, 164, 13);
textArea = new JTextArea();
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setBounds(4, 144, 165, 36);
// Adding everything
container.add(titlePane);
titlePane.add(titleText);
container.add(content);
content.add(inputLabel);
content.add(inputField);
content.add(scrollPane);
content.add(add);
content.add(remove);
content.add(sumAll);
content.add(sumEven);
content.add(sumOdd);
// Extras
frame.toFront();
frame.setVisible(true);
}
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equals("Add")) {
if (counter == 10) {
titleText.setText("Error: too many values");
} else {
numbers[counter] = Integer.parseInt(inputField.getText());
textArea.setText(Arrays.toString(numbers));
counter++;
}
System.out.println("Counter: " + counter);
} else if (event.getActionCommand().equals("Remove")) {
for (int i = 0; i < counter; i++) {
if (Integer.parseInt(inputField.getText()) == numbers[i]) {
for (int x = i; x < counter - 1; x++) {
numbers[x] = numbers[x + 1];
}
textArea.setText(Arrays.toString(numbers));
counter--;
} else {
titleText.setText("Error: value doesn't exist");
}
}
System.out.println("Counter: " + counter);
} else if (event.getActionCommand().equals("Sum All")) {
int sum = 0;
for (int i = 0; i <= counter; i++) {
sum += numbers[i];
}
titleText.setText("Sum is " + sum);
} else if (event.getActionCommand().equals("Sum Even")) {
int sum = 0;
for (int i = 0; i <= counter; i++) {
if (numbers[i] % 2 == 0) {
sum += numbers[i];
}
}
titleText.setText("Sum of even values is: " + sum);
} else if (event.getActionCommand().equals("Sum Odd")) {
int sum = 0;
for (int i = 0; i <= counter; i++) {
if (numbers[i] % 2 != 0) {
sum += numbers[i];
}
}
titleText.setText("Sum of odd values is: " + sum);
}
}
}
下面是代码的修改后的 actionPerformed 部分。现在可以删除最后一个数组值。但是,如果数组已满,并且用户试图删除最后一个元素以外的元素,则会抛出错误。我仍然不确定如何修复此错误。
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equals("Add")) {
if (counter == 10) {
titleText.setText("Error: too many values");
} else {
numbers[counter] = Integer.parseInt(inputField.getText());
textArea.setText(Arrays.toString(numbers));
counter++;
}
System.out.println("Counter: " + counter);
} else if (event.getActionCommand().equals("Remove")) {
if (Integer.parseInt(inputField.getText()) == numbers[9]) {
numbers[9] = 0;
counter--;
textArea.setText(Arrays.toString(numbers));
} else {
for (int i = 0; i < counter; i++) {
if (Integer.parseInt(inputField.getText()) == numbers[i]) {
for (int x = i; x <= counter - 1; x++) {
numbers[x] = numbers[x + 1];
}
textArea.setText(Arrays.toString(numbers));
counter--;
}
}
}
System.out.println("Counter: " + counter);
} else if (event.getActionCommand().equals("Sum All")) {
int sum = 0;
for (int i = 0; i <= counter; i++) {
sum += numbers[i];
}
titleText.setText("Sum is " + sum);
} else if (event.getActionCommand().equals("Sum Even")) {
int sum = 0;
for (int i = 0; i <= counter; i++) {
if (numbers[i] % 2 == 0) {
sum += numbers[i];
}
}
titleText.setText("Sum of even values is: " + sum);
} else if (event.getActionCommand().equals("Sum Odd")) {
int sum = 0;
for (int i = 0; i <= counter; i++) {
if (numbers[i] % 2 != 0) {
sum += numbers[i];
}
}
titleText.setText("Sum of odd values is: " + sum);
}
}
}
问题应该出在这段代码中:
for (int x = i; x <= counter - 1; x++) {
numbers[x] = numbers[x + 1];
}
则数组包含10个元素变量counter为10。 在这种情况下,迭代将计算 -1,即 9。在下一行中,您尝试获取“numbers[x + 1]”,即 10[(x=9)+1],因此超出范围. 如果将它更改为计数器 -2 而不是 -1 它应该可以工作,因为 atm 你从下一个字段中获取元素来填充它应该仍然工作的位置。
下面的代码应该正确删除整数值(如果存在)。但是,它不处理数组中存在多个相同整数值的情况(即数组有 1,1,1,1,1,1,1,0,0,0 并尝试删除 1)。它不会删除所有 1 并在文本框中显示所有 0。
我不确定要求是否在数组中具有唯一值。如果是这种情况,应该更改 add 函数来处理这种情况。
else if (event.getActionCommand().equals("Remove")) {
boolean removed = false;
titleText.setText("Integer Sums");
for (int i = 0; i < counter; i++) {
if (Integer.parseInt(inputField.getText()) == numbers[i]) {
for (int x = i; x < counter; x++) {
if (x == 9) {
numbers[x] = 0;
} else {
numbers[x] = numbers[x + 1];
numbers[x + 1] =0;
}
}
textArea.setText(Arrays.toString(numbers));
counter--;
removed = true;
}
}
if (!removed) {
titleText.setText("Error: value doesn't exist");
}
System.out.println("Counter: " + counter);
}