具有基于数组的堆栈和 queue 检查的回文
Palindrome with Array based stack and queue check
对于作业,我们将应用标题中的内容。我已经把所有的代码都写出来了,但是当我编译代码时,我在处理代码的第 19 行时遇到了四个错误。
while(!myQueue<String>.isEmpty() & !myStack.isEmpty()){
如果对您有帮助的话,这是完整的代码
import java.util.*;
public class Palindrome{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
String userInputConversion;
String userInput;
MyStack myStack = new MyStack();
MyQueue<String> myQueue = new MyQueue<String>();
System.out.println("Enter in a possible Palindrome. ");
userInputConversion = scan.next();
userInput = userInputConversion.toLowerCase();
String s = new String();
for(int i = 0; i < userInput.length(); i++){
s = "" + userInput.charAt(i);
System.out.print(s);
myQueue.enqueue(s);
myStack.push(s);
}
while(!myQueue<String>.isEmpty() & !myStack.isEmpty()){
String deQueued = myQueue.dequeue();
String popped = myStack.pop();
if(deQueued == popped)
System.out.println("Input is a palindrome. ");
else
System.out.println("input isnt a palindrome. ");
}
}
}
class MyStack{
private String[] stack;
private int top;
public MyStack(){
stack = new String [100];
top = 0;
}
public String push(String pushP){
if(top >= stack.length){
System.out.println("Error: MyStack.push(): stack overflow");
return "yes";
}
stack[top] = pushP;
top++;
}
public String pop(){
if(top <= 0){
System.out.print("Error in MyStack.pop(): stack empty");
return "n";
}
top--;
return stack[top];
}
public boolean isEmpty(){
if(top == 0){
return true;
}
else{
return false;
}
}
`}
class MyQueue<String> implements Iterable<String> {
private String[] queue;
private int front = 0;
private int rear = 0;
private int currentSize = 0;
public MyQueue(){
queue = (String[])(new Object[1]);
front = 0;
rear = 0;
currentSize = 0;
}
public boolean isEmpty() {
return (currentSize == 0);
}
public int currentSize() {
return currentSize;
}
public void enqueue(String String) {
if (currentSize == queue.length - 1) {
resize(2 * queue.length);
}
queue[rear++] = String;
if (rear == queue.length) {
rear = 0;
}
currentSize++;
}
public String dequeue() {
if (this.isEmpty()) {
throw new RuntimeException("Tried to dequeue an empty queue");
}
else {
String itemToReturn = queue[front];
queue[front++] = null;
currentSize--;
if (front == queue.length) {
front = 0;
}
if (currentSize == queue.length / 4) {
resize(queue.length / 2);
}
return itemToReturn;
}
}
private void resize(int capacity) {
String[] newArray = (String[]) new Object[capacity];
for (int i = 0; i < currentSize; i++) {
newArray[i] = queue[(front + i) % queue.length];
}
queue = newArray;
front = 0;
rear = currentSize;
}
}
如果有人能提供帮助那就太好了或者给点指点。
首先你让事情变得复杂,对于一个简单的字符串,你为什么要使用 stack 或 queue 。我想下面的逻辑会对你有所帮助
String original, reverse = "";
Scanner in = new Scanner(System.in);
System.out.println("Enter a string to check if it is a palindrome");
original = in.nextLine();
int length = original.length();
for ( int i = length - 1; i >= 0; i-- )
reverse = reverse + original.charAt(i);
if (original.equals(reverse))
System.out.println("Entered string is a palindrome.");
else
System.out.println("Entered string is not a palindrome.");
对于你的第二个编译错误,The type MyQueue<String> must implement the inherited abstract method Iterable<String>.iterator()
,你可以
- 实施
public Iterator<String> iterator()
方法
- 删除
implements Iterable<String>
语句
- 或者创建 MyQueue
abstract
创建 MyQueue abstract
对您没有多大帮助,而且我也没有在代码中看到您需要 iterator
或利用 MyQueue
是 Iterable
。作为一个队列,你会想要使用它的签名方法——enqueue
& dequeue
。因此,您可以安全地选择选项 2。否则要实施,answer 应该会有所帮助。
你也没有很好地实现type arguments的概念。您可能希望在 class 定义中使用 Type Parameter
;例如class MyQueue<String>
变为 class MyQueue<T>
。同样,成员变量和方法也会发生变化。
你的第 3 个编译错误,This method must return a result of type String
只是因为你的 push()
方法最后没有 return
语句。最好将其设为 void
,因为您不会在任何地方使用返回的 String "yes"
。对于 Whosebug
,您可以抛出一个 RuntimeException
,就像您在 dequeue
.
中所做的那样
几点建议
- 您犯了 classic 错误,在
if (deQueued == popped)
. 语句中将字符串与 ==
而不是 .equals()
进行比较
- 养成关闭 scanner/resources 的习惯,即使在这种情况下也没有坏处。
你的 while loop
在比较字符时有一点逻辑错误 - 我会让你找出那个。
对于作业,我们将应用标题中的内容。我已经把所有的代码都写出来了,但是当我编译代码时,我在处理代码的第 19 行时遇到了四个错误。
while(!myQueue<String>.isEmpty() & !myStack.isEmpty()){
如果对您有帮助的话,这是完整的代码
import java.util.*;
public class Palindrome{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
String userInputConversion;
String userInput;
MyStack myStack = new MyStack();
MyQueue<String> myQueue = new MyQueue<String>();
System.out.println("Enter in a possible Palindrome. ");
userInputConversion = scan.next();
userInput = userInputConversion.toLowerCase();
String s = new String();
for(int i = 0; i < userInput.length(); i++){
s = "" + userInput.charAt(i);
System.out.print(s);
myQueue.enqueue(s);
myStack.push(s);
}
while(!myQueue<String>.isEmpty() & !myStack.isEmpty()){
String deQueued = myQueue.dequeue();
String popped = myStack.pop();
if(deQueued == popped)
System.out.println("Input is a palindrome. ");
else
System.out.println("input isnt a palindrome. ");
}
}
}
class MyStack{
private String[] stack;
private int top;
public MyStack(){
stack = new String [100];
top = 0;
}
public String push(String pushP){
if(top >= stack.length){
System.out.println("Error: MyStack.push(): stack overflow");
return "yes";
}
stack[top] = pushP;
top++;
}
public String pop(){
if(top <= 0){
System.out.print("Error in MyStack.pop(): stack empty");
return "n";
}
top--;
return stack[top];
}
public boolean isEmpty(){
if(top == 0){
return true;
}
else{
return false;
}
}
`}
class MyQueue<String> implements Iterable<String> {
private String[] queue;
private int front = 0;
private int rear = 0;
private int currentSize = 0;
public MyQueue(){
queue = (String[])(new Object[1]);
front = 0;
rear = 0;
currentSize = 0;
}
public boolean isEmpty() {
return (currentSize == 0);
}
public int currentSize() {
return currentSize;
}
public void enqueue(String String) {
if (currentSize == queue.length - 1) {
resize(2 * queue.length);
}
queue[rear++] = String;
if (rear == queue.length) {
rear = 0;
}
currentSize++;
}
public String dequeue() {
if (this.isEmpty()) {
throw new RuntimeException("Tried to dequeue an empty queue");
}
else {
String itemToReturn = queue[front];
queue[front++] = null;
currentSize--;
if (front == queue.length) {
front = 0;
}
if (currentSize == queue.length / 4) {
resize(queue.length / 2);
}
return itemToReturn;
}
}
private void resize(int capacity) {
String[] newArray = (String[]) new Object[capacity];
for (int i = 0; i < currentSize; i++) {
newArray[i] = queue[(front + i) % queue.length];
}
queue = newArray;
front = 0;
rear = currentSize;
}
}
如果有人能提供帮助那就太好了或者给点指点。
首先你让事情变得复杂,对于一个简单的字符串,你为什么要使用 stack 或 queue 。我想下面的逻辑会对你有所帮助
String original, reverse = "";
Scanner in = new Scanner(System.in);
System.out.println("Enter a string to check if it is a palindrome");
original = in.nextLine();
int length = original.length();
for ( int i = length - 1; i >= 0; i-- )
reverse = reverse + original.charAt(i);
if (original.equals(reverse))
System.out.println("Entered string is a palindrome.");
else
System.out.println("Entered string is not a palindrome.");
对于你的第二个编译错误,The type MyQueue<String> must implement the inherited abstract method Iterable<String>.iterator()
,你可以
- 实施
public Iterator<String> iterator()
方法 - 删除
implements Iterable<String>
语句 - 或者创建 MyQueue
abstract
创建 MyQueue abstract
对您没有多大帮助,而且我也没有在代码中看到您需要 iterator
或利用 MyQueue
是 Iterable
。作为一个队列,你会想要使用它的签名方法——enqueue
& dequeue
。因此,您可以安全地选择选项 2。否则要实施,answer 应该会有所帮助。
你也没有很好地实现type arguments的概念。您可能希望在 class 定义中使用 Type Parameter
;例如class MyQueue<String>
变为 class MyQueue<T>
。同样,成员变量和方法也会发生变化。
你的第 3 个编译错误,This method must return a result of type String
只是因为你的 push()
方法最后没有 return
语句。最好将其设为 void
,因为您不会在任何地方使用返回的 String "yes"
。对于 Whosebug
,您可以抛出一个 RuntimeException
,就像您在 dequeue
.
几点建议
- 您犯了 classic 错误,在
if (deQueued == popped)
. 语句中将字符串与 - 养成关闭 scanner/resources 的习惯,即使在这种情况下也没有坏处。
==
而不是 .equals()
进行比较
你的 while loop
在比较字符时有一点逻辑错误 - 我会让你找出那个。