第二章 基本程序设计
2.1 编写简单的程序
编写程序设计如何设计算法以及如何将这些算法翻译成程序指令,即代码。 算法描述的是:如果要解决问题,所需要执行的动作以及这些动作执行的顺序。算法可以帮助程序员在使用设计语言编写程序之前做一个规划。算法可以用自然语言或伪代码描述。例如一个圆面积计算的程序算法如下描述:
1)读入半径。
2)利用下面的公式计算面积:
面积=半径半径3.14
3) 显示面积。
public class ComputeArea{
public static void main(string[]args) {
double radius ;
double area;
radius=20;
area=radius*radius*3.14;
System.out.println("The area for the circle of radius"+ radius " is " +area);
}
}
像radiu和area这样的变量对应于它们在内存的位置。每个变量都有名字,类型,大小和值。第三行声明radius可以存储一个double型的数值。直到给他赋一个数值时,该变量才被定义。
2.2 从控制台读取输入
从控制台读取输入,使得程序可以从用户那里获得输入。在上面的程序中,源代码的半径是固定的,为了能使用不同的半径,必须修改源代码然后重新编译它。很显然,这是非常不方便的。可以使用Scanner类从控制台输入。
Java使用System.out来表示标准输出设备,而用System.in,表示标准输入设备。默认情况下,输出设备是显示器,而输入设备是键盘。为了完成控制台输出,只需要用println方法就可以在控制台上显示基本值或字符串。Java并直接支持控制台输入,但是可以使用Scanner类创建它的对象,以读取来自System.in的输入。
提示用户输入一个半径,然后就算它的面积,运行程序如下:
import java.uti1.Scanner;
public class ComputeArea;
public static void main (String[] args) {
Scanner scanner = new ScannerfSystem.in);
System,out.print("Enter a number for radius);
double radius =Scanner.nextDouble():
double area= radius * radius * 3.14159;
System.out. println("The area for the circle of radius '' + radius + " is '' + area);
}
}
例 读取三个数值,然后显示他们的平均值
import java.util.Scanner;
public class ComputeAverage{
public static void main(string[] args){
Scanner scanner=new scanner(System.in);
System.out.print("Enter the three number");
double number1=scanner.nextDouble;
double number2=scanner.nextDouble;
double number3=scanner.nextDouble;
double average=(numer1+number2+number3)/3;
System.out.println("The average of "+number1+" "+number2+" "+number3+" is "+ average);
}
}
2,3 标识符
标识符是为了标识程序中诸如类,方法,和变量的元素而采用的命名。正如main,scanner,number等出现在程序中事物的名字。所有的标识符都必须遵循以下的规则:
1)标识符是由字母,数字,下划线和美元符号构成的字符序列。
2)标识符必须以字母,数字,下划线和美元符号开头,不能以数字开头。
3)标识符不能是保留字
4)标识符不能是true,false或null。
5)标识符可以为任意长度。
2.4 变量
变量用于表示程序中可以被改变的值。
2.5 赋值语句和赋值表达式
赋值语句将一个值指定给一个变量。
2.6 命名常量
命名常量是一个代表不变值的标识符
2.7 命名习惯
1)使用小写字母命名变量和方法。如果一个名字包括多个单词,就将他们连在一起,第一个单词的字母小写,而后面每个单词的首字母大写。
2)类名中的每个单词的首字母大写。
3)大写常量中的所有字母,两单词间用下划线连接。
2.8 数值数据类型和操作
Java针对整数和浮点数有六种数值类型,以及+,-,*,/,和%等操作符。
2.8.1 数值类型
每个数据类型都有它的取值范围。编译器会根据每个变量或常量的数据类型为其分配内存空间。Java为数值,字符值和布尔值数据提供的八种基本数据类型。
2.8.2 从键盘读取数值
2.8.3 数值操作符
数值数据类型的操作符包括标准的算术操作符。
2.8.4 幂运算
使用方法Math.pow((a,b)来计算a的b次幂。
2.9 数值型直接量
一个直接量是一个程序中直接出现的常数值。
2.9.1 整型直接量
只要整型直接量与整型变量相匹配,就可以将整型直接量赋值给该整型变量。如果直接量太大,超出变量的存储范围,就会出现编译错误。
2.9.2 浮点型直接量
浮点型直接量带小数点,默认情况下是 double 型的。
2.10 表达式求值以及操作符优先级
Java表达式的求值和数学表达式是一样的。
2.11 示例学习:显示当前时间
编写程序计算从GMT 1970年1月1日00:00:00开始到当前的毫秒数。
public class ShowCurrentTime{
public static void main (string[] args){
//获取从1970年1月1日到现在的秒数;
long totalmillisecond=System.currentTimeMillis;
//总毫秒数除1000获取总秒数;
long totalSecond=totalMillisecond/1000;
//总秒数除60获取分钟数
long totalMinutes=totalSecods/60;
//总分钟数除60获取小时数
long totalHours=totalMinutes/60;
//总小时数除24获取 当前小时数
long currentHour=totalHours%24;
//显示当前的时间;
System.out.println("Current time is " +curretHour +":"+ currentMinute +":"+ currentSecond +"GMT");
}
}
2.13 增强赋值操作符
操作符+, -, *, /, %可以结合赋值操作符形式增强操作符。例: i+=8等价于i=i+8
2.14 自增和自减操作符
自增操作符(++)和自减操作符(–)是对变量进行加1减1的操作。
2.15 数值类型转换
通过显示转换,浮点数可以被转换为整数。
2.16 软件开发过程
软件开发生命周期是一个多阶段的过程,包括需求规范、分析、设计、实现、测试、部署和维护。
练习题
import Java.until.scanner
public class demo2_1{
public static void main(string[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("Enter a degree in celsius:");
double celsius=scanner.nextDouble();
double Fahrenheit=(9/5)*celsius+32;
System.out.println(celsius+"celsius is" +fahrenheit+"fahrenheit");
}
}
import Java.until.scanner
public class demo2_2{
public static void main(string[] args){
Scanner scanner=new Scanner(System.in);
//提示用户输入半径和高
System.out.print(Enter the radius and length of a cylinder:);
double radius=scanner.nextDouble();
double length=scanner.nextDouble();
double PI=3.14;
//计算面积体积
double area=radius*radius*PI;
double volume=area*length;
//将体积输出
System.out.println( "The area is" +area);
System.out.println("The volume is" + volume);
}
}
import Java.until.scanner
public class demo2_3{
public static void main(string[] args){
//获取用户输入的数字
Scanner scanner=new Scanner(System.in);
System.out.print("Enter a number between 0 and 1000:);
int number=scanner.nextInt();
//将数字进行分解
/*
987%10=7->a
987/10=98
98%10=8->b
98/10=9
9%10=9->c
a+b+c
*/
int a=number%10;
number/=10;
int b=number%10;
number/=10;
int c=number%10;
//将三个数字相加并输出
System.out.println("The sum of the digit is" +(a+b+c));
}
}
import Java.until.scanner
public class demo2_3{
public static void main(string[] args){
//获取用户输入的数字
Scanner scanner=new Scanner(System.in);
System.out,print("Enter the number of minutes:);
/*总分钟数除60算出小时数
总小时数除60出天数算
总天数处365算出年数
*/
int minutes=scanner.nextInt();
int days=minutes/60/24;
int years=days/365;
days=days%365;
// 输出天数和年数
System.out,println(minnutes+" minutes is approximately" +years+" years and "+days+"days");
}
}
为什么求出来的天数要对365取余
import Java.until.scanner
public class demo2_3{
public static void main(string[] args){
//获取用户输入的时间
Scanner scanner=new Scanner(System.in);
System.out,print("Enter the number of minutes:);
//获取偏移量
System.out.print("Enter the time zone offset to GMT:");
int offset=scanner.nextInt();
long millis=System.currentTimeMillis();
long seconds=millis/1000;
long minutes=seconds/60;
long hours=minutes/60;
//如何从经过的毫秒值里获取当前小时 总小时%24
System.out.print(hours%24+offset+":");//东八区+8
//...当前分钟
System.out.print(minutes%60+":");
//...当前秒
System.out.println(seconds%60);
}
}
import Java.until.scanner
public class demo2_3{
public static void main(string[] args){
//获取用户输入的水重量 初始温度 最终温度
Scanner scanner=new Scanner(System.in);
System.out.print("Enter the amout of water in kilograms:);
double weight=scanner.nextDouble();
System.out.print("Enter the initial temperature:);
double
initialTemp=scanner.nextDouble();
System.out.print("Enter the final temperature:);
double finalTemp=scanner.nextDouble();
//根据公式计算能量
double energy=weight*(finalTemp-initialTemp)*4184;
//输出能量值
System.out.println("The energy needed is"+ energy);
}
}
import Java.until.scanner
public class demo2_3{
public static void main(string[] args){
//获取用户账户存钱金额
Scanner scanner=new Scanner(System.in);
System.out.print("Enter the monthly saving amount:);
double money=100;
double rata=0.00417;
money=money*(1+rate);
money=(money+100)*(1+rate);
money=(money+100)*(1+rate);
money=(money+100)*(1+rate);
money=(money+100)*(1+rate);
System.out.println("After the
sixth month, the accout value is " +money);
}
}
import Java.until.scanner
public class demo2_3{
public static void main(string[] args){
//提示用户输入两个点
Scanner scanner=new Scanner(System.in);
System.out.print(“Enter x1 and y1”);
double x1=scanner.nextDouble();
double y1=scanner.nextDouble();
System.out.print(“Enter x2 and y2”);
doublex2=scanner.nextDouble();
double y2=scanner.nextDouble();
//计算两点之间的距离
double distance=Math.sqrt(Math.pow((x2-x1),2)+Math.pow((y2-y1),2));
System.out.println("The distance between the two point is"+distance);
}
}
import Java.until.scanner
public class demo2_3{
public static void main(string[] args){
//提示用户输入六边形的边长
Scanner scanner=new Scanner(System.in);
System.out.print(“Enter the side of hexagon ”);
double side=scanner.nextDouble();
//计算六边形的面积
double area=(3*Math.pow(3,0.5))/2*
side*side;
// 输出六边形的面积
System.out.print("The area of the hexagon is"+ area);
}
}
import Java.until.scanner
public class demo2_3{
public static void main(string[] args){
//提示用户在-58到41之间的度数, 以及风速
Scanner scanner=new Scanner(System.in);
System.out.print("Enter the temperature in Fahrenheit between -58°F and 41°F:)s per hour
double t=scanner.nextDouble();
System.out.print(“ Enter the wind speed in miles (>=2) per hour:”);
double v=scanner.nextDouble();
double T=35.74+0.6215t-35.75*Math.pow(v,0.16)+0.4275*t*Math.pow(v,0.16);
//输出风寒度
System.out.println("The wind chill index is"+ T);
}
}
import Java.until.scanner
public class demo2_3{
public static void main(string[] args){
//提示用户输入三个点的坐标
Scanner scanner=new Scanner(System.in);
System.out.print("Enter three points for a triangle :);
double x1=scanner.nextDouble();
double y1=scanner.nextDouble();
double x2=scanner.nextDouble();
double y2=scanner.nextDouble();
double x3=scanner.nextDouble();
double y3=scanner.nextDouble();
//2.根据坐标求三边
double sideA=Math.sqrt(Math.pow(x1-x2, 2)+Math.pow(y1-y2, 2));
double sideB=Math.sqrt(Math.pow(x1-x3, 2)+Math.pow(y1-y3, 2));
double sideC=Math.sqrt(Math.pow(x2-x3, 2)+Math.pow(y2-y3, 2));
//3.根据三边求面积
double s=(sideA+sideB+sideC)/2;
double area=Math.sqrt(s*(s-sideA)*(s-sideB)*(s-sideC));
System.out.println(“The erea of the triangle is" + area );
}
}