gpt4 book ai didi

java - 第一个 Java 数据结构作业

转载 作者:行者123 更新时间:2023-11-29 08:57:44 26 4
gpt4 key购买 nike

编辑 - 我修改了我的代码并用新代码替换了我原来的工作,仍然有类似的问题

我参加的这门数据结构类(class)是我的第一门编程类(class),所以我有点不适应。第一个项目真的让我大吃一惊。它是制作逆波兰符号计算器。它或多或少是完整的,只是有很多错误。我花了几个小时来调整我的代码,但当我解决一个问题时,它会引发另一个问题。我提前为我糟糕的编程技巧道歉。

公共(public)类 ReversePolishStack {

class SinglyLinkList {
Node head = null;

public void push(float newData) {
Node cache = this.head;
this.head = new Node(newData, cache);
}

public float pop() {
float out = this.head.data;
head = head.next;
return out;
}
public void add(float num1, float num2) {
num1 = pop();
num2 = pop();
push(num1+num2);
}
public void sub(float num1, float num2) {
num1 = pop();
num2 = pop();
push(num2-num1);
}
public void div(float num1, float num2) {
num1 = pop();
num2 = pop();
push(num2/num1);
}
public void mult(float num1, float num2) {
num1 = pop();
num2 = pop();
push(num1*num2);
}
class Node {
public float data;
public Node next;

public Node(float data, Node next) {
this.data = data;
this.next = next;
}
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ReversePolishStack rps = new ReversePolishStack();
SinglyLinkList sll = rps.new SinglyLinkList();
String entry;
do
{
System.out.print("Enter Expression:\n");
Scanner in = new Scanner(System.in);
entry =in.nextLine();
StringTokenizer st = new StringTokenizer(entry," ");
String s1;
int count = 0;
while (st.hasMoreElements())
{
if (entry.length()<4) {// for an error message not enough input
System.out.print("Not enough input"); break;
}
else if (count>1 && sll.head.next==null) {
System.out.print("Not enough operands"); break;
}
s1 = st.nextToken();
if((s1.equals("+") || s1.equals("-") || s1.equals("*") || s1.equals("/"))) {
if(s1.equals("+"))
sll.add(sll.head.data, sll.head.next.data);
else if(s1.equals("-"))
sll.sub(sll.head.data, sll.head.next.data);
else if(s1.equals("/")) {
if (sll.head.data==0) {
System.out.println("Division by Zero enounterd."); break;
}
sll.div(sll.head.data, sll.head.next.data);
}
else if(s1.equals("*"))
sll.mult(sll.head.data, sll.head.next.data);
else
System.out.print("Unrecognized input");break;
}
else {
sll.push(Float.parseFloat(s1));
}
count++;
}
System.out.println(sll.head.data);
sll.pop();
} while(entry.equals("0")== false); // typeing a single zero terminates
System.out.print("Thanks for using my RPN Calculator!");
}

我从事此工作已有一段时间了,我确信每次尝试修复错误时,我也会将其添加到卷积中,即我的代码。任何帮助将不胜感激!

最佳答案

首先,您应该从 main 方法中取出您定义的类。之后你会得到一个错误,因为类 singlyLinkList (singlyLinkList sll = new singlyLinkList();) 的实例已经创建,但没有创建外部类 (ReversePolishStack).

参见引用 this link about nested classes .

我还将 Node 类放入 singlyLinkList 类中(顺便说一下,您应该将此类重命名为 SinglyLinkList,首字母大写)。

我没有深入了解您代码的逻辑,但至少在这些修复之后您的代码将可以编译:

public class ReversePolishStack {

class singlyLinkList {
Node head = null;

public void push(float newData) {
Node cache = this.head;
this.head = new Node(newData, cache);
}

public float pop() {
float out = this.head.data;
head = head.next;
return out;
}

class Node {
public float data;
public Node next;

public Node(float data, Node next) {
this.data = data;
this.next = next;
}
}
}

/**
* @param args
* the command line arguments
*/
public static void main(String[] args) {
float number1;
float number2;
ReversePolishStack rps = new ReversePolishStack();
singlyLinkList sll = rps.new singlyLinkList();
System.out.print("Enter Expression:\n");
// from here will be the same as you wrote
}
}

我还建议您从 main 方法中提取程序逻辑,并在 ReversePolishStack 中创建方法,以便使用 oop 概念。

希望这是有用的!再见!

关于java - 第一个 Java 数据结构作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19311501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com