我正在试着做一个成分百分比计算器(主要是为了更快地完成我的化学作业(job)),我正在进行实际的计算.我试图从用户输入的元素中获取质量,但它总是返回-1,并显示以下错误:

enter image description here

我试着调试它,但我的IDE(IntelliJ Idea)不让我看到变量或try 判断任何东西.

100错误发生在第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".例如:

如果您有一个带有2个值的wantedElement列表,则将其命名为"Test1"和"Test2".然后执行wantedElements.indexOf("Test1")将返回索引0,而wantedElements.indexOf("Test2")将返回索引1.

由于我不确定您要在示例中try 做什么,因此很难提供进一步的帮助.希望这能让您更好地理解indexOf()函数是如何工作的,从而帮助您继续进行项目

Java相关问答推荐

RDX触发ChoiceBox转换器(并按字符串值排序)

有没有一种方法使保持活动设置专用于java.net.http.HttpClient的一个实例

根据对象和值的参数将映射<;T、值&>转换为列表<;T&>

Kubernetes的Java客户端检索状态.处于终止状态的Pod的阶段';正在运行';

如何打印本系列的第n项y=-(1)-(1+2)+(1+2+3)+(1+2+3+4)-(1+2+3+4+5)...Java中的(1+2+3+4...+n)

当我已经安装了其他版本的Java时,如何在Mac OSX 14.3.1上安装Java 6?

返回响应时,CamelCase命名约定不起作用

用户填充的数组列表永不结束循环

Jolt变换JSON数组问题

在Eclipse中数组的可空性

使用OAuth 2.0资源服务器JWT时的授权(授权)问题

声明带有泛型的函数以用作查找映射中的值

如何将Pane的图像快照保存为BMP?

如何在JavaFX循环中完美地制作一个AudioClip/MediaPlayer?

舰队运行配置Maven版本

具有最大共同前景像素的图像平移优化算法

在ECLIPSE上的M1 Pro上运行JavaFX的问题

Java类型推断:为什么要编译它?

Java 17与Java 8双重表示法

获取401未经授权,即使在标头中设置了浏览器名称和cookie