当前位置: 首页 > 知识库问答 >
问题:

我的代码给了我一个数字格式异常,我不知道它来自哪里

牧璞
2023-03-14

所以我需要为学校编写一个Java程序:它需要用户想要多少(IQ)值,然后调用一个computeMethod来计算这些值,然后生成一个输出,但有一个数字格式的Exception,我不知道它是从哪里来的。以下是我认为给我带来例外的方法:

private int[] values;
private double average;
private int modus;
private int aboveAvg;
private int belowAvg;
private int upperBound;
private int lowerBound;
private int valuesInIntervall;

public void compute(String userInput){
        String stringNumber = " ";
        int position = 0;

        for (int i = 0; i < userInput.length(); i++){
            if(userInput.charAt(i) == ';' && i != 0){
                for(int j = i - 1; userInput.charAt(j)!= ';'; j--){
                    stringNumber = String.valueOf(userInput.charAt(j)) + stringNumber;
                    stringNumber.replace(" ", "");
                    values[position] = Integer.parseInt(stringNumber);
                }
                stringNumber = " ";
            }
        }

        // average
        for (int i = 0; i < values.length; i++){
            average += values[i];
        }
        average /= values.length;

        // modus

        int sameValue = 0;
        int newSameValue = 0;
        int value = values[0];
        for (int i = 0; i < values.length; i++){
            for (int j = i + 1; j < values.length; j++){
                if(values[i] == values[j]){
                    newSameValue++;
                    value = values[j];
                }
            }
            if (newSameValue > sameValue){
                sameValue = newSameValue;
                newSameValue = 0;
                modus = value;
            }
        }

        // below/above average

        for (int i = 0; i < values.length; i++){
            if (values[i] > average){
                aboveAvg++;
            }else{
                belowAvg++;
            }
        }
    }

    public void computeIntervall(){
        Scanner scanner = new Scanner(System.in);

        System.out.println("Untergrenze: ");
        lowerBound = scanner.nextInt();
        System.out.println("Obergrenze: ");
        upperBound = scanner.nextInt();

        for (int i = 0; i < values.length; i++){
            if(values[i] >= lowerBound && values[i] <= upperBound) valuesInIntervall++;
        }

        System.out.println("Im Breich [" + lowerBound + ", " + upperBound + "] liegen " + valuesInIntervall + " IQ-Werte");
    }

main方法只接受一个字符串,并让它计算它将在哪里被分隔成数字,然后将数字存储在一个int数组中。

此外,模态是数据中出现次数最多的元素。

(很抱歉,我刚从IDE复制过来,格式不好)

输出如下:

Exception in thread "main" java.lang.NumberFormatException: For input string: "1 "
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
    at java.base/java.lang.Integer.parseInt(Integer.java:668)
    at java.base/java.lang.Integer.parseInt(Integer.java:784)
    at ue221005.IQ.compute(IQ.java:24)
    at ue221005.IQ.main(IQ.java:102)

Process finished with exit code 1

编辑:问题解决了,谢谢你帮我!

共有1个答案

咸育
2023-03-14

stringNumber(字符串编号)。replace(“”,“”)不会修改stringNumber,而是返回新字符串。

使用

stringNumber = stringNumber.replace(" ", "");

 类似资料:
  • 当我尝试编译这段代码时,Eclipse会出现以下两个错误: > 用于函数:maxmin的非法修饰符;只允许最终 对于:Mn不能解析为变量 为什么会出现这两个错误? 我想这可能已经回答了这个问题,但我不明白其中使用的术语。 这是我的代码:

  • 抱歉,如果不允许这样做。这是我第一次问问题。无论如何,我应该实现一个程序,根据文本读取等级。 “实施一个程序,根据以下内容计算理解某些文本所需的大致年级水平。文本:恭喜!今天是你的一天。你要去很棒的地方!你走了,走了!3 年级 在完成代码之后。每次我编译它时,它都会给我一个异常,即我除以零。几乎就像在我要求用户输入文本后,它根本不被读取,字母计数保持在零。我不知道如何绕过它。下面是我导入java.

  • 给定一个0和1的数组,我们最多可以将K个值从0更改为1。 返回仅包含1的最长(连续)子数组的长度。 例1: 例2: 注: https://leetcode.com/problems/max-consecutive-ones-iii/ 这是问题链接。在第一个测试用例中,我得到了输出9,但应该是6。我不知道哪里出了问题?

  • 我拿不到输出。。有人能帮我得到输出吗 下面给出了程序运行的示例(注意:下面的粗体文本是用户输入的输入): 输入三角形的三条边

  • 我试图模拟一些静态方法,但得到以下堆栈跟踪 DAQHelper是一个静态类,它是从我当前正在测试的方法调用的。为了保持故事简短,我有一个方法addMetricData(…)调用getCategoryResource(…)等此getCategoryResource(…)是一个公共静态方法,它反过来调用getDomainResource(DAQHelper中的私有静态方法)。getDomainReso

  • 我很确定错误是由最后一行引起的。从我所知,它不满意我使用变量“%d”。但这不是整数的有效输入吗? 错误消息: