为什么我的ArrayList索引的索引总是返回-1?

问题描述 投票:0回答:1

我正在尝试制作一个成分百分比计算器(主要是为了更快地完成我的化学作业),并且我正处于实际计算正在进行的阶段。我试图从用户输入的元素中获取质量,但它总是返回 -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) ;
            
        }
    }
}
java arraylist
1个回答
0
投票

这里的问题是你的线路:

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() 函数的工作原理,以帮助您继续您的项目

© www.soinside.com 2019 - 2024. All rights reserved.