java习题

程序填空题

  1. 如下程序可以打印所有3位的水仙花数,水仙花数是指其值等于它本身每位数字立方和的数,如153就是一个水仙花数。
public class Main {
    public static void main(String[] args) {
        int i, bit0, bit1, bit2;
        for(i = 100; i < 999; ++i) {
            bit0 = i % 10;
            bit1 = (i/10)%10;
            bit2 = i/100;
            if(bit0 * bit0 * bit0 + bit1 * bit1 * bit1 + bit2 * bit2 * bit2 == i)
                System.out.printf("%d\n", i);
        }
    }
}
  1. 程序改错题:求1到5的阶乘的和
    功能:求1!+2!+3!+4!+5!
public class Main {
    public static void main(String[] args) {
        fun();
    }
    public static void fun(){
        int n,j;
        //float s=0.0,t=1.0;//此行语句有错误,改正后填到下侧空格内
        float s=0.0f,t=1.0f;
        for(n=1;n<=5;n++){
            //s=1;//此行语句有错误,改正后填到下侧空格内
            t = 1;
            for(j=1;j<=n;j++){
                //t=t*n;//此行语句有错误,改正后填到下侧空格内
                t = t*j;
            }
            //s+t=s;//此行语句有错误,改正后填到下侧空格内
            s = s + t;
        }
        System.out.printf("jiecheng=%.0f\n",s);
    }
}

函数题

1. Person类2

在Person类的基础上,添加一个带参数的构造函数,参数分别为姓名,性别,年龄,提供print函数打印其信息

输入描述:
姓名(name),性别(sex)和年龄(age)

输入样例:
Lucy male 23

输出样例:
name:Lucy; sex:male; age:23
裁判测试程序:

import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
         Scanner scan = new Scanner(System.in);      
         String name = scan.next();      
         String sex = scan.next();      
         int age = scan.nextInt();
         Person p = new Person(name,sex,age);
         p.print();
         scan.close(); 
    }
}
/* 你的代码被嵌在这里*/

答案

class Person{
	private String name;
	private String sex;
	private int age;
	Person(String name,String sex,int age){
		this.name=name;
		this.sex=sex;
		this.age=age;
	}
	public void print() {
		System.out.println("name:"+name+"; sex:"+sex+"; age:"+age);
	}
}
2. 设计Student类

定义一个Student类,表示学生信息。Student类有学号(id,整型)、姓名(name,字符串)、性别(sex,字符型,m表示男性,f表示女性)三个私有数据域;有参构造方法将学号、姓名、性别设置为给定的参数;成员方法display显示学生的信息。
注意,Student类的定义应该这样开始:
class Student {
也就是说,Student类的class前面不要有public。
裁判测试程序样例:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int id = in.nextInt();
        String name = in.next();
        char sex = in.next().charAt(0);
        Student student = new Student(id, name, sex);
        student.display();
        in.close();
    }
}

// 需要同学们完成部分,Student类
class Student {
    // 数据成员
    // 成员方法
}

答案

class Student{
	private int id;
	String name = new String();
	private char sex;
	
	public Student(int a,String b,char c){
		id = a;
        name = b;
		sex = c;
	}
    public void display(){
        System.out.println(id);
        System.out.println(name);
        System.out.println(sex);
    }
}
3. 创建一个直角三角形类实现IShape接口

创建一个直角三角形类(regular triangle)RTriangle类,实现下列接口IShape。两条直角边长作为RTriangle类的私有成员,类中包含参数为直角边的构造方法。

interface IShape {// 接口

public abstract double getArea(); // 抽象方法 求面积

public abstract double getPerimeter(); // 抽象方法 求周长

}
输入样例:
3.1 4.2
输出样例:
6.51
12.5202
裁判测试程序样例:

import java.util.Scanner;
import java.text.DecimalFormat;
 
interface IShape {
    public abstract double getArea();
 
    public abstract double getPerimeter();
}
 
/*你写的代码将嵌入到这里*/

public class Main {
    public static void main(String[] args) {
        DecimalFormat d = new DecimalFormat("#.####");
        Scanner input = new Scanner(System.in);
        double a = input.nextDouble();
        double b = input.nextDouble();
        IShape r = new RTriangle(a, b);
        System.out.println(d.format(r.getArea()));
        System.out.println(d.format(r.getPerimeter()));
        input.close();
    }
}

答案

//创建一个直角三角形类实现IShape接口
class RTriangle implements IShape {
  RTriangle(double a, double b) {
    this.a = a;
    this.b = b;
  }
  public double getArea() {
    return 0.5 * a * b;
  }
  public double getPerimeter() {
    return (a + b + Math.sqrt(a * a + b * b));
  }
  private double a;
  private double b;
}
4. 学生类

有一个学生类的结构如下:

class Student {
    private int no;
    private String name;
        private int score;
   
    public Student(int _no, String _name, int _score) {
        no = _no;
        name = _name;
        score = _score;
    }
        public int getNo() {return no;}
        public String getName() {return name;}
        public int getScore() {return score;}
    
    public void print(){
        System.out.println(no + " "+name+" "+score);
    }
}

请构造main函数完成如下功能:
从键盘中读入三个学生的信息,比较他们的成绩,按照成绩由高到低排列输出

输入描述:
三个学生的学号、姓名、成绩

输出描述:
由高到低排列输出的三个学生信息

输入样例:

1 wang 89
2 liu 78
3 ma 90

输出样例:

3 ma 90
1 wang 89
2 liu 78

裁判测试程序样例:

/*你的代码被嵌在这里*/

class Student {
    private int no;
    private String name;
        private int score;
    
    public Student(int _no, String _name, int _score) {
        no = _no;
        name = _name;
                score = _score;
    }
        public int getNo() {return no;}
        public String getName() {return name;}
        public int getScore() {return score;}
    
    public void print(){
        System.out.println(no + " "+name+" "+score);
    }
}

答案

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		final int N = 3; // 学生个数
		Scanner cin = new Scanner(System.in);
		Student[] stu = new Student[N];
		
		for(int i = 0; i < N; i ++ ) {
			stu[i] = new Student(cin.nextInt(), cin.next(), cin.nextInt());
		}
		Arrays.sort(stu, new Comparator<Student>( ) { // 使用 Comparator 建立以什么属性进行排序
			@Override
			public int compare(Student o1, Student o2) {
				// TODO Auto-generated method stub
				return o2.getScore() - o1.getScore();
			}
		});
		
		for(int i = 0; i < N; i ++) {
			stu[i].print();
		}
	}
}

编程题

1. 求n的阶乘

根据输入的整数n,输出n的阶乘

import java.util.Scanner;
public class Main {
  public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n;
        n = input.nextInt();
        int result = 1;
        for (int i=1;i<=n;i++){
            result=result*i;
        }
        System.out.println(result);
     }
}
2. 计算公约数和公倍数

输入两个正整数m和n(2<=m和n<=100000),计算它们的最大公约数和最小公倍数并输出。
输入样例:
36 946

输出样例:
最大公约数2
最小公倍数17028

import java.util.Scanner;
public class Main{
    public static void main(String args[]){
        Scanner input = new Scanner(System.in);
        long x = input.nextInt();
        long y = input.nextInt();
        long max,min;
        if (x>y){
            max = x;
            min = y;
        }
        else{
            max = y;
            min = x;
        }
        long a,c,remainder;
        a = max*min;
        remainder = max%min;
        while(remainder != 0){
            max=min;
            min=remainder;
            remainder=max%min;
        }
        c = a/min;
        System.out.println("最大公约数"+min);
        System.out.println("最小公倍数"+c);
    }
}
3. 学生类-构造函数

定义一个有关学生的Student类,内含类成员变量:
String name、String sex、int age,所有的变量必须为私有(private)。

1.编写有参构造函数:
能对name,sex,age赋值。

2.覆盖toString函数:
按照格式:类名 [name=, sex=, age=]输出。使用idea自动生成,然后在修改成该输出格式

3.对每个属性生成setter/getter方法

4.main方法中

•输入1行name age sex , 调用上面的有参构造函数新建对象。

输入样例:
tom 15 male

输出样例:
Student [name=‘tom’, sex=‘male’, age=15]

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		String name=in.next();
		int age=in.nextInt();
        String sex=in.next();
        Student a=new Student(name,sex,age);
        System.out.println(a.toString());
	}
}
class Student{
	private String name;
	private String sex;
	private int age;
	
	Student(String name,String sex,int age){
		this.name= name;
		this.sex= sex;
		this.age=age;
	}
	@Override
	public String toString() {
		return "Student [name='" + name + "', sex='" + sex + "', age=" + age + "]";
	}//如果是return,主函数就要写System+如果是System,那么主函数就用对象直接调用

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值