You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求修复Java程序:absoluteValue方法参数不匹配错误

Fixing the "method cannot be applied to given types" Error in Your Java Program

Hey there! Let's break down why you're getting that error and fix your code right away. The error error: method absoluteValue in class Pset3Ex4 cannot be applied to given types pops up for two main reasons:

1. Non-static method can't be called directly from static main

Your absoluteValue method is an instance method (no static keyword), but the main method is static. Static methods can't call non-static methods directly—you either need to make absoluteValue static, or create an instance of Pset3Ex4 to call the method.

2. Method call doesn't match the method's parameter list

You're calling absoluteValue() with no arguments, but your method is defined to take a double parameter. Worse, that parameter is completely redundant because you immediately overwrite it with input from the Scanner!

Fixed Code (Simplest Version)

Here's the corrected code that addresses both issues, plus a small improvement to close the Scanner properly:

import java.util.Scanner;
public class Pset3Ex4 {
    public static void main(String[] args) {
        // Call the static method and store the result
        double absResult = absoluteValue();
        System.out.println("The absolute value is: " + absResult);
    }

    // Make method static and remove the redundant parameter
    public static double absoluteValue() {
        Scanner sc = new Scanner(System.in);
        System.out.print("Input a number: ");
        double d = sc.nextDouble();
        sc.close(); // Clean up the Scanner resource
        return d < 0 ? -d : d; // Shorter way to write the conditional
    }
}

Key Changes Explained

  • Added the static keyword to absoluteValue: This lets you call it directly from the static main method without creating a class instance.
  • Removed the double d parameter: Since you're getting the value from user input, the parameter was unnecessary and caused the argument mismatch error.
  • Added sc.close(): Prevents potential resource leaks from leaving the Scanner open.
  • Used a ternary operator (d < 0 ? -d : d) as a cleaner alternative to the if-else block (this is optional, but makes the code more concise!).

Alternative: Using an Instance Method

If you prefer to keep absoluteValue as a non-static method, you can create an instance of your class to call it:

import java.util.Scanner;
public class Pset3Ex4 {
    public static void main(String[] args) {
        // Create an instance of Pset3Ex4
        Pset3Ex4 calculator = new Pset3Ex4();
        double absResult = calculator.absoluteValue();
        System.out.println("The absolute value is: " + absResult);
    }

    // Non-static method, no redundant parameter
    public double absoluteValue() {
        Scanner sc = new Scanner(System.in);
        System.out.print("Input a number: ");
        double d = sc.nextDouble();
        sc.close();
        return d < 0 ? -d : d;
    }
}

Either version will fix your error and work as expected. Pick the one that fits your needs best!

内容的提问来源于stack exchange,提问作者user9816925

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:04:40