第 4 章 数学関数、文字、および文字列
目次
第 4 章 数学関数、文字、および文字列
4.2 形状: 最大円距離
最大円距離は、球上の 2 点間の距離です
。 コード:
public class Exercise04_02 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Enter point 1 (latitude and longitude) in degrees: ");
double x1= in.nextDouble();
double y1= in.nextDouble();
System.out.print("Enter point 2 (latitude and longitude) in degrees: ");
double x2= in.nextDouble();
double y2= in.nextDouble();
in.close();
double r=6371.01;
x1=Math .toRadians(x1);
x2=Math .toRadians(x2);
y1=Math .toRadians(y1);
y2=Math .toRadians(y2);
double d=r *(Math.acos(Math.sin(x1) * Math.sin(x2) + Math.cos(x1) * Math.cos(x2) * Math.cos(y1- y2)));
System.out.printf("The distance between the two points is "+d+"km");
}}
4.5 幾何学: 正多角形の面積
正多角形の面積を求める:
コード:
import java.util.*;
public class Exercise04_05 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.print("Enter the number of sides:");
int n=in.nextInt();
System.out.print("Enter the side: ");
double s=in.nextDouble();
in.close();
double area=(n*s*s)/(4.0*Math.tan(Math.PI/n));
System.out.printf("The area of the polygon is "+area);
}
}
4.6 円上のランダムな点
中心が (0,0 )、半径 40 の円上に 3 つのランダムな点を生成し、これらの 3 つのランダムな点によって形成される三角形の 3 つの角度の度を表示します。
コード:
package firstprogram;
import java.util.Scanner;
public class Exercise04_06 {
public static void main(String[] args) {
float rad1;
float rad2;
float rad3;
while(true) {
//随机产生三个弧度
rad1=2*(float)(Math.PI*Math.random());
rad2=2*(float)(Math.PI*Math.random());
rad3=2*(float)(Math.PI*Math.random());
//防止弧度相等
if(rad1==rad2||rad2==rad3||rad1==rad3) {
continue;
}
else
break;
}
float x1=40*(float)Math.cos(rad1);
float x2=40*(float)Math.cos(rad2);
float x3=40*(float)Math.cos(rad3);
float y1=40*(float)Math.sin(rad1);
float y2=40*(float)Math.sin(rad2);
float y3=40*(float)Math.sin(rad3);
System.out.println("Three points are :");
System.out.printf("A(%.2f,%.2f) B(%.2f,%.2f) C(%.2f,%.2f)",x1,y1,x2,y2,x3,y3);//精度2
//边长
float s1=(float)Math.sqrt(Math.pow(x1-x2,2)+Math.pow(y1-y2, 2));
float s2=(float)Math.sqrt(Math.pow(x2-x3,2)+Math.pow(y2-y3, 2));
float s3=(float)Math.sqrt(Math.pow(x1-x3,2)+Math.pow(y1-y3, 2));
//角度
float A=(float)Math.toDegrees(Math.acos((s2*s2+s3*s3-s1*s1)/(2*s2*s3)));
float B=(float)Math.toDegrees(Math.acos((s1*s1+s3*s3-s2*s2)/(2*s1*s3)));
float C=(float)Math.toDegrees(Math.acos((s2*s2+s1*s1-s3*s3)/(2*s2*s1)));
System.out.println("Three angles are: ");
System.out.printf("A:%.2f B:%.2f C:%.2f",A,B,C);
}
}
4.7 頂点座標
正五角形の外接円の半径、中心(0,0)を入力し、5つの頂点の座標を表示します。
コード:
import java.util.Scanner;
public class Exercise04_07 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.print("Enter the radius of the bounding circle: ");
double r=in.nextDouble();
System.out.println("The coordinates of five points on the pentagon are");
double angle=Math.PI/2-2*Math.PI/5;
double x=0;
double y=0;
for(int i=0;i<5;i++) {
x=r*Math.cos(angle);
y=r*Math.sin(angle);
System.out.printf("(%.4f,%.4f)\n",x,y);
angle+=2*Math.PI/5;
}
in.close();
}
}
4.8 ASCIIコードに対応した文字を出力する
コード:
public class Exercise04_08 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.print("Enter an ASCII code: ");
int c=in.nextInt();
System.out.println("The character for ASCII code "+c+" is "+(char)c);
}
}
4.9 出力文字のUnicodeコード
コード:
import java.util.Scanner;
public class Exercise04_09 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.print("Enter a character: ");
char c=in.next().charAt(0);
System.out.println("The Unicode for the character "+c+" is "+(int)c);
}
}
4.11 10 進数から 16 進数へ (0 ~ 15 の整数)
(注: 10 を超える数値の変換)
コード:
import java.util.Scanner;
public class Exercise04_11 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.print("Enter a decimal value (0 to 15): ");
int num=in.nextInt();
if(num>15||num<0) {
System.out.println(num+" is an invalid input");
}
else if(num<10){
System.out.println("The hex value is "+num);
}
else {
System.out.println("The hex value is "+(char)('A'+num-10));
}
}
}
4.13 母音または子音を決定する
文字を入力して母音と子音を判定
コード:
import java.util.Scanner;
public class Exercise04_08 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.print("Enter a letter: ");
char l=in.next().charAt(0);
if(Character.toUpperCase(l)=='A'||Character.toUpperCase(l)=='O'||Character.toUpperCase(l)=='E'||Character.toUpperCase(l)=='I'||Character.toUpperCase(l)=='U')
{
System.out.println(l+" is a vowel");
}
else if(Character.isLetter(l))
{
System.out.println(l+" is a consonant");}
else
System.out.println(l+" is an invalid input");
}
}
4.17 月の日
年名の最初の 3 文字を入力すると、その月の日数が表示されます。
public class Exercise04_17 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.print("Enter a year: ");
int year=in.nextInt();
System.out.print("Enter a month: ");
String month=in.next();
if(month.equals("Jan")||month.equals("Mar")||month.equals("May")||month.equals("Jul")||
month.equals("Agu")||month.equals("Oct")||month.equals("Dec"))
{
System.out.println(month+" "+year+" has 31 days");
}
else if(month.equals("Nov")||month.equals("Apr")||month.equals("Jun")||month.equals("Sep"))
{
System.out.println(month+" "+year+" has 30 days");
}
else if(month.equals("Feb")) {
if((year%400==0)||(year%4==0&&year%100!=0)) {
System.out.println(month+" "+year+" has 29 days");}
else {
System.out.println(month+" "+year+" has 28 days");}
}
else {
System.out.println(month+" is not a correct month name");}
}}
4.18 専攻と学生の地位
public class Exercise04_18 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.print("Enter two characters: ");
String s=in.nextLine();
if(s.charAt(0)=='M')
System.out.print("Mathematics ");
else if(s.charAt(0)=='C') {
System.out.print("Computer Science ");
}
else if(s.charAt(0)=='I') {
System.out.print("Information technology ");
}
else {
System.out.print("Invalid input ");
System.exit(1);
}
if(s.charAt(1)=='1') {
System.out.print("Freshman");
}
else if(s.charAt(1)=='2') {
System.out.print("Sophomore ");
}
else if(s.charAt(1)=='3') {
System.out.print("Junior");
}
else if(s.charAt(1)=='4') {
System.out.print("Senior");
}
else {
System.out.print("Invalid status code ");
System.exit(2);
}
}}
4.21 SSNの検出
社会保障番号。形式は DDD-DD-DDDD で、D は数字であり、入力が正当であるかどうかが判断されます。
public class Exercise04_18 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.print("Enter a SSN: ");
String s=in.nextLine();
if((s.charAt(3)=='-')&&(s.charAt(6)=='-')&&(Character.isDigit(s.charAt(0)))
&&(Character.isDigit(s.charAt(1)))&&(Character.isDigit(s.charAt(2)))
&&(Character.isDigit(s.charAt(4)))&&(Character.isDigit(s.charAt(5)))
&&(Character.isDigit(s.charAt(7)))&&(Character.isDigit(s.charAt(8)))
&&(Character.isDigit(s.charAt(9))))
{
System.out.println(s+" is a valid social security number");
}
else {
System.out.println(s+" is an invalid social security number");
}
}}
4.23 財政上の申請: 謝礼金
報酬明細を出力します。
import java.util.Scanner;
public class Exercise04_23 {
public static void main(String[] args) {
String name;
double hours;
double hpay;
double ftaxr;//联邦税率
double staxr;//州税率
System.out.print("Enter employee's name: ");
Scanner in=new Scanner(System.in);
name=in.nextLine();
System.out.print("Enter number of hours worked in a week: ");
hours=in.nextDouble();
System.out.print("Enter hourly pay rate: ");
hpay=in.nextDouble();
System.out.print("Enter federal tax withholding rate: ");
ftaxr=in.nextDouble();
System.out.print("Enter state tax withholding rate: ");
staxr=in.nextDouble();
double total=hours*hpay;
double ftax=ftaxr*total;
double stax=staxr*total;
double alltax=ftax+stax;
double net=total-alltax;
System.out.println("Employee Name: "+name);
System.out.println("Hours Worked: "+hours);
System.out.println("Pay Rate: $"+hpay);
System.out.println("Gross Pay: $"+total);
System.out.println("Deductions:\n"
+ " Federal Withholding ("+(int)(ftaxr*100)/100.0+"%): $"+ftax);
System.out.println(" State Withholding ("+(int)(staxr*100)/100.0+"%): $"+(int)(stax*100)/100.0);
System.out.println(" STotal Deduction: $"+(int)(alltax*100)/100.0);
System.out.print("Net Pay: $"+(int)(net*100)/100.0);
}
}
補足的な知識ポイント:
1. 三角関数
演習 4.2 では、Math.toRadians() メソッドを使用して角度をラジアンに変換し、
acos() メソッドを使用してアークス逆三角関数を計算します。
演習 4.6 では、Math.toDegrees() メソッドを使用してラジアンを度に変換します。
2. 文字列を読み取る
-
文字列内の 1 文字だけを読み取る必要がある場合は、charAt() メソッドを使用できます。
例:
String str = "abc";
文字列から文字を取得
char ch = str.charAt(0); 最初の文字
char ch2 = str.charAt(1); 2 番目の文字
ch は a、ch2 は b ; -
next() メソッドを使用する場合、入力文字列にスペースを含めることはできません。
-
nextLine() メソッドは、スペースの影響を受けることなく、一度に 1 行のデータを読み取ることができます。
-
Java は、BufferedReader クラスを使用して文字列を受信し、readLine() メソッドを呼び出して文字列を取得することもできます。
3. 文字列変換の場合の方法
演習 4.11 では、Character.toUpperCase() メソッドを使用して、判断を容易にするためにすべての文字を大文字にした新しい文字列を返します。
Character.isLetter(ch) は、指定された文字が文字の場合に true を返します。
4.出口出口
system.exit(int status) 。
正常終了:
ステータスが 0 の場合、プログラムは正常に終了します。つまり、現在実行中の Java 仮想マシンが終了します。
異常終了:
ステータスが 0 以外の整数 (負の数を含む、通常は 1 または -1) の場合、現在のプログラムが異常終了したことを意味します。
5. 小数点以下の桁を保持する
例 4.23 を参照してください
(int)(net*100)/100.0) 小数点以下 2 桁を維持します