-1

を表示するプログラムを作成しようとしていますxy任意の点の座標を、線形関数全体に反映させますax+b。ただし、範囲外であるという実行時エラーが発生します。プリミティブ データ型でメソッドを呼び出すことができないことはわかっていますが、それを取得する方法が他にわかりません。

import java.util.*;
public class ReflectivePoint {
    public static void main (String[]args){
        Scanner lol = new Scanner(System.in);
        System.out.println("Please enter the linear function.");

        //That will be in the format ax+b
        String function = lol.nextLine();
        Scanner lol2 = new Scanner(System.in);
        System.out.println("Please enter the point.");

        //That will be in the format a,b
        String point = lol2.nextLine();
        int a = point.charAt(1);
        int b = point.charAt(3);
        int m = function.charAt(1);
        int c = function.charAt(4);
        int x1 = (2 / (m + 1 / m)) * (c + b - a / m) - a;
        int y1 = (-1/m) * x1 + a / m + b;
        System.out.println(x1+", "+y1);
    }
}
4

4 に答える 4

0

他の人が指摘している範囲外の問題は別としてcharAt(0)、数値はchar配列(文字列)へのオフセットであり、nth要素を取得しないため、最初から始める必要があります。

また、整数に変換するには「0」を引く必要があります。

string point = "4";
int a = point.charAt(0);
//a=52 //not what you wanted

string point = "4";
int a = point.charAt(0) - '0';
//a=4 //this is what you wanted
于 2012-08-23T12:00:27.003 に答える
0

以下を使用できます。

int a = point.charAt(0);

point空でないことを条件とします。

理想的には、入力文字列に対して使用前の長さチェックを実行する必要があります。

于 2012-08-23T11:57:44.463 に答える
0

おそらく、「1,2」など、長さ 3 の文字列を取得しています。

charAt(3) は、存在しない文字列の 4 番目の文字を返そうとするため、StringIndexOutOfBoundsException がスローされます。

于 2012-08-23T11:53:02.447 に答える
0

範囲外のインデックス エラーは、「この文字列の 4 番目の文字を要求しましたが、文字列は 4 文字未満です」という意味です。

(ほとんどのコンピューター言語のインデックスと同様に) 最初の文字は 0 であることに注意してください。 charAt("hello",1) == 'e'

charAt() を呼び出す前に、文字列の長さを確認する必要があります。または、例外をキャッチして処理します。

charAt() は、現在 1 桁しか処理しないため、プログラムにとっておそらく最良の選択ではありません。String.split() を試して、カンマで文字列を分割してください。

また、現時点では文字の ASCII 値を使用しています。つまり、(インデックスを修正した場合) "a,b" は、m=97 と c=98 で計算を行うことになります。それはあなたが望むものではないと思います。Integer.parseInt() について調べる

于 2012-08-23T11:54:40.690 に答える