gpt4 book ai didi

java - 使用堆栈计算分子质量

转载 作者:行者123 更新时间:2023-12-02 00:45:53 25 4
gpt4 key购买 nike

我的任务是使用一堆整数来计算给定分子的分子质量。我应该使用数组自己实现 IntStack 类。然后我应该创建一个类,将字符串作为输入并评估分子。输入中的唯一字符是左括号和右括号、数字 2-9、H(氢)、C(碳)和 O(氧)。我得到的三种元素的分子量分别为 1、12 和 16。

public class IntStack
{
private int[] stack;
public int index;

public IntStack()
{
stack = new int[100];
index = -1;
}

public void push(int x)
{
stack[index + 1] = x;
index++;
}

public int pop()
{
if (index == -1)
{
return -1;
}
int num = stack[index];
index--;
return num;
}

public int peek()
{
if (index == -1)
{
return 0;
}
return stack[index];
}
}


import java.util.Scanner;

public class MolecularMass
{
private static IntStack stack;

public static void main(String[] args)
{
stack = new IntStack();
Scanner kb = new Scanner(System.in);
System.out.print("Enter the molecule: ");
String input = kb.nextLine();
int result = evaluate(input);
System.out.println("The Molecular Mass of " + input + " is " + result);
}

public static int evaluate(String s)
{
int answer = 0;
int num = 0;

for(int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
switch(c)
{
case '2':
num = stack.pop();
num *= 2;
stack.push(num);
break;
case '3':
num = stack.pop();
num *= 3;
stack.push(num);
break;
case '4':
num = stack.pop();
num *= 4;
stack.push(num);
break;
case '5':
num = stack.pop();
num *= 5;
stack.push(num);
break;
case '6':
num = stack.pop();
num *= 6;
stack.push(num);
break;
case '7':
num = stack.pop();
num *= 7;
stack.push(num);
break;
case '8':
num = stack.pop();
num *= 8;
stack.push(num);
break;
case '9':
num = stack.pop();
num *= 9;
stack.push(num);
break;
case 'C':
stack.push(12);
break;
case 'H':
stack.push(1);
break;
case 'O':
stack.push(16);
break;
case '(':
stack.push(0);
break;
case ')':
int result = 0;
while(stack.peek() != 0)
{
result += stack.pop();
}
int throwaway = stack.pop();
stack.push(result);
break;
default:
break;
}
}

for(int i = 0; i < stack.index; i++)
{
answer += stack.pop();
}

return answer;
}
}

它应该按如下方式运行:

输入分子:((CH)2(OH2H)(C(H))O)3

((CH)2(OH2H)(C(H))O)3 的分子量为 222

我不断得到分子质量为 0 或 1

编辑:这是我的评估方法的算法:如果该字符是化学元素,则程序会推送该元素的分子量。如果该字符是左括号,则程序将 0 压入堆栈。如果字符是右括号,则程序将括号内的所有内容相加,直到到达左括号(存储为 0)如果字符是数字,则将数字弹出堆栈,将其乘以输入数字,然后将其推回堆栈最后,它将堆栈中的所有内容相加并返回结果。

最佳答案

假设您正在学习编码,我建议您遵循自己查找错误的过程。我建议您采用以下方法:

  1. 编写一组单元测试以确保您的 IntStack 完全符合您的预期。
  2. evaluate逻辑移至一个单独的类中(使用IntStack作为隐藏的实现细节)
  3. 提供多种方法来执行evaluate的各个部分,例如element(Character)count(Character)startGroup ()endGroup()
  4. 在创建每个方法时,请创建单元测试以确保它们完全符合您的预期。
  5. 一旦它们都完美运行,就可以编写代码来读取输入并调用您编写的各种方法。

这比我们指出你的错误要花更多的时间,但我保证你会学到更多。

关于java - 使用堆栈计算分子质量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57898422/

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