Java练习题

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);
}
}
}
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值