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

Java二项式展开程序:如何提取首项中的单个变量字符?

解决二项式展开程序中提取变量字符的问题

方法一:优化现有Scanner逻辑

你当前的Scanner处理思路其实是可行的——Scanner.nextLong()会自动读取输入中所有连续的数字(包含正负号),不受整数长度影响;Scanner.next()则会读取空格分隔后的变量部分,直接取第一个字符就是目标变量。只需调整变量类型并增加异常处理,就能解决问题:

import java.util.*;
public class binomial_expansion
{
    public static long factorial(long x)
    {
        long xf = x ;
        for(long i = 1; i<=x ; i++)
        {
            xf*=i ;
        }
        return xf ;
    }
    
    public static double C(long n, long r)
    {
        double c = factorial(n)/(factorial(n-r)*factorial(r)) ;
        return c ;
    }
    
    public static void main() {
        Scanner sc = new Scanner(System.in);
        boolean error = false;
        String a = "";
        long coeff = 0;
        char var = ' ';
        
        do {
            if(error) {
                System.out.println("Error; Please try again");
                error = false;
            }
            System.out.println("Enter a (separate single variable with space) : ");
            a = sc.nextLine().trim(); // 去除首尾空格
            if(a.isEmpty()) {
                error = true;
                continue;
            }
            
            try (Scanner scan = new Scanner(a)) {
                coeff = scan.nextLong();
                if(scan.hasNext()) {
                    var = scan.next().charAt(0);
                } else {
                    // 处理只输入数字未输入变量的情况
                    error = true;
                }
            } catch (InputMismatchException e) {
                // 捕获输入格式错误(比如非整数数字)
                error = true;
            }
        } while(error);
        
        sc.close();
        // 测试输出
        System.out.println("提取的系数:" + coeff + ",变量:" + var);
    }
}

方法二:使用正则表达式(适配更多输入场景)

如果想支持更灵活的输入格式(比如允许数字和变量之间无空格,例如-5x或3y),可以用正则表达式直接匹配提取,无需额外创建Scanner实例:

import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class binomial_expansion
{
    public static long factorial(long x)
    {
        long xf = x ;
        for(long i = 1; i<=x ; i++)
        {
            xf*=i ;
        }
        return xf ;
    }
    
    public static double C(long n, long r)
    {
        double c = factorial(n)/(factorial(n-r)*factorial(r)) ;
        return c ;
    }
    
    public static void main() {
        Scanner sc = new Scanner(System.in);
        boolean error = false;
        String a = "";
        long coeff = 0;
        char var = ' ';
        // 正则表达式:匹配正负整数+单个字母变量,支持带空格或不带空格
        String regex = "^([+-]?\\d+)\\s*([a-zA-Z])$";
        
        do {
            if(error) {
                System.out.println("Error; Please try again");
                error = false;
            }
            System.out.println("Enter a (e.g. 3 x or -5y) : ");
            a = sc.nextLine().trim();
            
            Matcher matcher = Pattern.compile(regex).matcher(a);
            if(matcher.matches()) {
                coeff = Long.parseLong(matcher.group(1));
                var = matcher.group(2).charAt(0);
            } else {
                error = true;
            }
        } while(error);
        
        sc.close();
        // 测试输出
        System.out.println("提取的系数:" + coeff + ",变量:" + var);
    }
}

核心说明

  • 方法一基于你原有的代码逻辑,仅修正了变量类型(原代码中x1应定义为char而非long)并补充了异常处理,就能稳定提取变量,完全无需关心整数长度。
  • 方法二通过正则表达式,同时支持带空格和无空格的输入格式,适配更多用户输入习惯,代码更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:17:44