请检查并优化下面这串代码:import java.util.ArrayList; class MyStack extends ArrayList<String> { public void push(String str) { this.add(str); } public String pop() { if (this.isEmpty()) { return null; } int lastIndex = this.size() - 1; String str = this.get(lastIndex); this.remove(lastIndex); return str; } } public class TestMyStack { public static void main(String[] args) { MyStack stack = new MyStack(); for (int i = 0; i < 5; i++) { System.out.print("请输入第" + (i + 1) + "个字符串:"); String str = System.console().readLine(); stack.push(str); } System.out.println("\n逆序显示这些字符串:"); while (!stack.isEmpty()) { String str = stack.pop(); System.out.println(str); } } }
时间: 2024-01-13 10:03:24 浏览: 74
这段代码已经非常简洁和有效,但是还有一些可以改进的地方。以下是我提出的一些建议:
1. 在MyStack类中,我们可以重写add方法,以确保只添加字符串类型的元素。这样可以避免将错误类型的元素添加到堆栈中。
2. 在MyStack类中,我们可以重写toString方法,以便在打印堆栈时更方便。
3. 在TestMyStack类中,我们可以使用Scanner类来替换System.console().readLine()方法。
以下是修改后的代码:
```
import java.util.ArrayList;
import java.util.Scanner;
class MyStack extends ArrayList<String> {
@Override
public boolean add(String str) {
if (str instanceof String) {
return super.add(str);
}
return false;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
for (int i = this.size() - 1; i >= 0; i--) {
sb.append(this.get(i)).append("\n");
}
return sb.toString();
}
public String pop() {
if (this.isEmpty()) {
return null;
}
int lastIndex = this.size() - 1;
String str = this.get(lastIndex);
this.remove(lastIndex);
return str;
}
}
public class TestMyStack {
public static void main(String[] args) {
MyStack stack = new MyStack();
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < 5; i++) {
System.out.print("请输入第" + (i + 1) + "个字符串:");
String str = scanner.nextLine();
stack.push(str);
}
System.out.println("\n逆序显示这些字符串:");
System.out.println(stack);
}
}
```
现在,add方法确保只添加字符串类型的元素,toString方法以逆序显示堆栈,而使用Scanner类来获取用户输入。
阅读全文