1.定义一个名为Square的类表示正方形,使其继承Shape抽象类,覆盖Shape类中的抽象方法getPerimeter()和getArea()。编写程序测试Square类的使用。
package square1;
abstract class Shape
{
abstract public double getPerimeter();
abstract public double getArea();
}
class Square extends Shape
{
double width;
double height;
public Square(double width,double height)
{
this.width=width;
this.height=height;
}
public double getArea()
{
return(width+height);
}
public double getPerimeter()
{
return(2*(width+height));
}
}
class cs
{ public static void main(String[] args)
{
Square s1= new Square(1,2);
System.out.println("Area: "+s1.getArea());
System.out.println("Perimeter: "+s1.getPerimeter());
}
}
2.定义一个名为 Circle的类,其中含有double型的成员变量centerX和centerY表 示圆心坐标,radius 表示圆的半径。定义求圆面积的方法getArea0方法和求圆周长的方法getPerimeter()。为半径radius 定义访问方法和修改方法。定义一个带参数构造方法,通过给出圆的半径创建圆对象。定义默认构造方法,在该方法中调用有参数构造方法,将圆的半径设置为1.0。画出该类的UML图。**
public class Circle {
double centerX=0,centerY=0,radius;
public double getRadius() {
retu在这里插入代码片rn radius;
}
public void noCircle() {
this.radius=1;
}
public void setRadius(double radius) {
this.radius = radius;
}
public double CircleBody() {
return radius;
}
public double getArea() {
return radius*radius*Math.PI;
}
public double getPerimeter() {
return 2*radius*Math.PI;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Circle c=new Circle();
c.noCircle();
System.out.println("圆的半径为:"+c.CircleBody());
System.out.println("圆的面积为:"+c.getArea());
System.out.println("圆的周长为:"+c.getPerimeter());
}
}
3.定义一个名为person的类,其中含有一个String类型的成员变量name和一个int类型的成员变量age,分别为这两个变量定义访问方法和修改参数,另外再为该类定义一个名为speak的方法,在其中输出其name和age的值。画出UML图。编写程序,使用上面定义的person类,实现数据的访问和修改。
public class person {
String name;
int age;
public void setName(String name) {
this.name=name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age=age;
}
public int getAge() {
return age;
}
public void speak(
) {
System.out.println("Name="+name);
System.out.println("Age="+age);
}
public static void main(String[]args) {
person p=new person();
p.setName("ZHAOYONG");
p.setAge(20);
p.speak();
System.out.println(p.getName());
System.out.println(p.getAge());
}
}
4.编写程序,从键盘上输入五个整数,并存放到一个数组中,然后计算所有元素的和、最大值、最小值及平均值。
package aray;
import java.util.Scanner;
public class ar02 {
private static Scanner scan = new Scanner(System.in);
public static void main(String args[]){
System.out.println("请输入五个数字");
int[] target = new int[5];
int mini = 0;
int max = 0;
int sum = 0;
for(int i=0; i<5; i++){
target[i] = scan.nextInt();
sum += target[i];
if (i==0 || mini > target[i]){
mini = target[i];
}
if (i==0 || max < target[i]){
max = target[i];
}
}
System.out.println("最小的数字是: " + mini);
System.out.println("最大的数字是: " + max);
System.out.println("和:" + sum);
System.out.println("平均值是: " + sum/5);
}
}
5.编写一个方法,求一个double型数组中最小元素,
编写测试程序,提示用户输入5个double型数,并存放到一个数组中,然后调用这个方法返回最小值。
package aray;
import java.util.Scanner;
public class ar07 {
public static void main(String[] args) {
double[] numbers=new double[5];
Scanner input=new Scanner(System.in);
System.out.println("请输入5个double类型的数据");
for (int i=0;i<5;i++){
numbers[i]=input.nextDouble();
}
double min=numbers[0];
for (int i=1;i<numbers.length;i++){
if(min>numbers[i]){
min=numbers[i];
}
}
System.out.println();
System.out.println("最小值为:"+min);
}
}
6.编写程序,随机产生100个1~6的整数,统计每个数出现的次数。
package aray;
import java.util.Random;
public class ar04 {
public static void main(String[] args) {
int[] ary = new int[6];
Random rd = new Random();
for(int i=1; i<=100; i++) {
int v = rd.nextInt(7);
ary[(v==0?1:v)-1] ++;
}
for(int i=0; i<6; i++) {
System.out.println("数字"+(i+1)+"出现"+ary[i]+"次");
}
}
}
7.编写程序,提示用户输入一个字符串,显示它的长度、第一个字符和最后一个字符,
package test;
import java.util.Scanner;
public class test01 {
public static void main(String[] args) {
System.out.println("请输入任意一个字符串:");
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
System.out.println(s+"的长度为"+s.length());
System.out.println(s+"的第一个字符为"+s.charAt(0));
System.out.println(s+"的最后一个字符为"+s.substring(s.length()-1));
}}
结果:
8.编写一个名为Outer的类,它包含一个名为Inner的类。在Outer中添加一个方法,它返回一个Inner类型的对象。在main()方法中,创建并初始化一个指向某个Inner对象的引用。
方法一:
package test;
import java.util.*;
class Outer{
class Inner{
}
int sum() {
int c;
c = 1 +2;
return c;
}
Inner way(){
Inner oo = new Inner();
return new Inner();
}
}
public class test02 {
public static void main(String[] args) {
Outer a=new Outer();
Outer.Inner b= a.new Inner();
}
}
方法二:
package test;
import java.util.*;
class Outer{
class Inner{
}
Inner way(){
return new Inner();
}
}
public class test02 {
public static void main(String[] args) {
Outer a=new Outer();
Outer.Inner b=a.way();
}
}
异常:
1.编写一个应用程序,要求从键盘输入-一个double型的圆的半径,计算并输出其面积。测试当输入的数据不是double型数据(如字符串“abc”会产生什么结果,怎样处理。
package a;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;
public class CIRCLE {
public static void main(String[] args) throws IOException{
System.out.print("请输入半径:");
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in ));
try {
System.out.print("圆的面积为:"+computerArea (Double.parseDouble(br.readLine())));
}
catch(NumberFormatException e) {
System.out.print("您输入的不是数值,请重新输入");
}
}
public static double computerArea(double r)
{
return Math.PI*r*r;
}
}
2.编写程序,提示用户读取两个整数,然后显示他们的和。程序应该在输入不正确时提示用户再次读取数字
package a;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Main
{
public static void main(String[]args)
{
Scanner in=new Scanner(System.in);
int a,b;
while(true)
{
try{
a=in.nextInt();b=in.nextInt();
System.out.println("Sum is "+(a+b));
}
catch(InputMismatchException e)
{
in.nextLine();
System.out.println("Incorrect input and re-enter two integers:");
continue;
}
break;
}
}
}
并发编程
1.编写程序,创建一个Account类表示账户,初始余额2000元。定义一个线程类模拟从账户中取钱,规定每个线程每次只能取100元。编写程序,创建两个线程,从账户取钱,分析可能发生的冲突。
package a;
class Bank{
private int balance = 2000;
public synchronized void deposit(int amount) {
balance = balance + amount;
}
public synchronized void withdraw(int amount) {
balance = balance - amount;
System.out.println(Thread.currentThread().getName()
+" 取出100元,当前余额为: "+getBalance()+" 元");
}
public synchronized int getBalance() {
return balance;
}
public synchronized void setBalance(int balance) {
this.balance = balance;
}
}
public class Account implements Runnable{
Bank bank;
public Account(Bank bank){
this.bank=bank;
}
public void run() {
while(bank.getBalance()>100) {
bank.withdraw(100);
}
}
public static void main(String[] args) {
System.out.println();
// TODO Auto-generated method stub
Bank bank=new Bank();
Account account02=new Account(bank);
Thread thread1=new Thread(account02);
Thread thread2=new Thread(account02);
thread1.start();
thread2.start();
}
}
2.编写程序,创建个 Counter 对象(程序17.6),使用Runnable 创建100个任务,在每个任务中调用Counter对象的incrementO方法100 次,同时输出每个任务的任务号和Counter对象的count成员值。将每个任务添加到Executer中执行,分析执行结果。
package a;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
public class Counter {
private int count=0;
public int getUserCount() {
return count;
}
public void increment() {
count++;
}
public void decrement() {
count--;
}
public static void main(String[] args) {
Counter counter=new Counter();
for (int i = 1; i <=100; i++) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Runnable i1=()->{
for (int j = 1; j <= 100; j++) {
counter.increment();
System.out.println("第"+Thread.currentThread().getName()+"次方法,"+"第"+j+"次调用,"+"count值"+counter.getUserCount());
}
};
Executor executor=Executors.newCachedThreadPool();
executor.execute(i1);
}
}
}