我正在尝试制作一个成分百分比计算器(主要是为了更快地完成我的化学作业),并且我正处于实际计算正在进行的阶段。我试图从用户输入的元素中获取质量,但它总是返回 -1 并出现此错误:
我尝试对其进行调试,但我的 IDE (IntelliJ IDEA) 不允许我查看变量或尝试检查任何内容。
注意: 错误发生在第 64 行。
import java.util.ArrayList ;
import java.util.Scanner ;
import java.util.concurrent.TimeUnit ;
import static java.lang.System.in ;
import static java.lang.System.out ;
public class Main {
static void clearScreen() {
out.println("\033[H\033[2J") ;
out.flush() ;
}
public static void main(String[] args) {
String elementID ;
int totalElements ;
int elementCount ;
double elementMass ;
double totalMass ;
Scanner sc = new Scanner(in) ;
ArrayList<String> elementNames = new ArrayList<>() ;
ArrayList<String> wantedElements = new ArrayList<>() ;
ArrayList<Integer> wantedElementsCount = new ArrayList<>() ;
ArrayList<Double> elementMasses = new ArrayList<>() ;
while (true) {
out.print("\nEnter amount of elements in compound: ") ; totalElements = Integer.parseInt(sc.nextLine()) ;
out.println("TOTAL ELEMENTS COUNT: " + totalElements + "\n") ;
wantedElements.clear() ;
wantedElementsCount.clear() ;
for (int elms = 1 ; elms <= totalElements ; elms++) {
out.print("Enter name for element #" + elms + " (it will be remembered if spelt correctly): ") ; elementID = sc.nextLine() ;
out.println("ENTERED ELEMENT NAME: " + elementID + "\n") ;
if (!(elementNames.contains(elementID))) {
elementNames.add(elementID) ;
out.print("Enter mass for element #" + elms + ": ") ; elementMass = Double.parseDouble(sc.nextLine()) ;
out.println("ENTERED ELEMENT MASS: " + elementMass + "\n") ;
if (!(elementMasses.contains(elementMass))) {
elementMasses.add(elementMass) ;
}
wantedElements.add(elementID) ;
} else {
wantedElements.add(elementNames.get(elementNames.indexOf(elementID))) ;
}
out.print("Enter the amount of the element there is: ") ; elementCount = Integer.parseInt(sc.nextLine()) ;
out.println("ENTERED ELEMENT AMOUNT: " + elementCount + "\n") ;
wantedElementsCount.add(elementCount) ;
}
totalMass = 0 ;
for (int i = 0 ; i < elementMasses.size() ; i++) {
totalMass += elementMasses.get(i) ;
}
for (int i = 0 ; i < wantedElements.size() ; i++) {
out.print("% MASS OF " + wantedElements.get(i) + ": ") ;
// The wantedElements.indexOf() part tries to get the index of the current elements that the user wants to use in the given equation, which will correlate with the elementMasses list
out.println(elementMasses.get(wantedElements.indexOf(i)) * wantedElementsCount.indexOf(i) / totalMass * 100) ; // This is where the error happens
}
out.println("TOTAL COMPOUND MASS" + totalMass) ;
}
}
}
这里的问题是你的线路:
out.println(elementMasses.get(wantedElements.indexOf(i)) * wantedElementsCount.indexOf(i) / totalMass * 100)
这部分:
elementMasses.get(wantedElements.indexOf(i))
没有意义,这就是它抛出错误的原因。
使用indexOf时,您应该在其中传递一个wantedElement,而不是整数“i”。例如:
如果您有一个 WantedElements 列表,该列表中有 2 个值,请说“Test1”和“Test2”。然后执行 WantElements.indexOf("Test1") 将返回索引 0,而 WantElements.indexOf("Test2") 将返回索引 1。
由于我不确定您在示例中到底想做什么,因此很难提供进一步的帮助。希望这能让您更好地了解 indexOf() 函数的工作原理,以帮助您继续您的项目