1

私はJavaが初めてなので、それを理解するためにランダムなプログラムを作成しようとしています。次のような二次方程式をユーザー入力として受け取るものを作成しようとしています。x^2 + 3x -1

これは高度すぎるかもしれません (またはそうでないかもしれません) が、ループ内で文字を 1 つずつ抽出する方法を知りたいと思っています。それがすべて数字だった場合、それらを使用して配列に保存できると思います.isDigit()が、データ型が異なるため、これを行う方法がわかりません。これまでの私の「コード」は次のようになります

import java.lang.String;
import java.lang.StringBuffer;
import java.util.Scanner;
import java.lang.Character;

public class Lab
{
    public static void main(String[] args)
    {
        Scanner user_input = new Scanner(System.in);
        System.out.print("Please input the quadratic equation (ex: 2x^2 + 3x - 2): ");

        String request = user_input.nextLine();
            int myArr[];
        String lettArr[];
        for (int i = 0; i <= request.length(); i++)
        {
            String c = request.charAt(i);

            if (request.isDigit(c))
            {
                myArr[1] += c;
            }
            if(request.isLowerCase(c))
            {
                lettArr[1] += c;
            }
        }
        System.out.println(myArr[0]);
    }
}

myメソッド.isDigit().isLowerCase()メソッドが機能していません。正しい意味で使っていると思います。これは私のレベルではかなり複雑で、これが行き止まりなのか、それとも受け入れられる戦略なのか疑問に思っています。

ありがとう。

4

2 に答える 2

2

あなたがしようとしているのは、ユーザー入力から係数を抽出することだと思います。あなたのアプローチはうまくいくかもしれませんが、考慮しなければならない多くのケースがあります (たとえば、+/- 記号)。代わりに、Java の正規表現を試してみませんか。

String input = "2x^2 - 4x + 1";
input = input.replaceAll("\\s", ""); //removes  all whitespaces

Pattern p = Pattern.compile("(-?\\d+)x\\^2((\\+|-)\\d+)x((\\+|-)\\d+)");
Matcher m = p.matcher(input);

if (!m.matches()) {
    System.out.println("Incorrect input");
    return;
}

int a, b, c;
a = Integer.parseInt(m.group(1));
b = Integer.parseInt(m.group(2));
c = Integer.parseInt(m.group(4));

System.out.println(String.format("a=%d, b=%d, c=%d", a, b, c));

このフラグメントを適応させて、コードで使用できます。ただし、係数は整数であると想定しました。代わりに、それらが必要な場合doubleは、指定された正規表現の形式を変更Integer.parseIntし、Double.parseDouble. 興味があれば詳しく書きます。

于 2013-11-07T23:15:38.140 に答える