Java-实验一

package Ex1.Firstquestion;

public class Student{
    private String name;
    private int age;
    private double marksOfJava;
    private int year;
    private int month;
    private int day;

    public Student(String name,int age,int year,int month,int day,double marksOfJava){
        this.name = name;
        this.age = age;
        this.year = year;
        this.month = month;
        this.day = day;
        this.marksOfJava = marksOfJava;
    }
    public void show(){
        System.out.printf("name: %15s  age: %3d  year: %5d  month: %3d  day: %3d  markOfJava: %6.2f",
                this.name,this.age, this.year,this.month,this.day,this.marksOfJava);
    }
}
package Ex1.Firstquestion;

import java.util.Scanner;

/**
 * @author 15328
 * 1、编写一个Java应用程序,用户从键盘输入十名学生的信息,
 * 至少包括姓名、年龄、出生年月日、java课程实验成绩,
 * 成绩使用浮点数,年龄使用整型,程序将输出年龄、java课程实验成绩的平均值。
 * 提示:Scanner对象调用nextDouble()或nextFloat()可以获取用户从键盘输入的浮点数。
 */
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String name;
        int age,year,month,day;
        double markOfJava;
        int numOfStudent;
        System.out.println("请输入学生数量: ");
        numOfStudent = input.nextInt();
        input.nextLine();
        System.out.printf("请输入这%d个学生的信息:\n",numOfStudent);
        double sumOfMarks = 0;
        double sumOfAge = 0;
        Student [] students = new Student[numOfStudent];
        for(int i = 0; i < numOfStudent; i++ ){
            name = input.next();
            age  = input.nextInt();
            year = input.nextInt();
            month = input.nextInt();
            day = input.nextInt();
            markOfJava = input.nextDouble();
            sumOfAge += (double)age;
            sumOfMarks += markOfJava;
            input.nextLine();
            students[i] = new Student(name,age,year,month,day,markOfJava);
            /* 或者不用前面一系列变量给构造函数赋值,直接将输入数值用作构造函数参数使用
             * students[i] = new Student(input.next(),input.nextInt(),input.nextInt(),
             * input.nextInt(),input.nextInt(),input.nextDouble());*/
        }
        for(Student x: students){
            x.show();
            System.out.println();
        }
        System.out.println("平均年龄为:"+String.format("%.2f",sumOfAge/numOfStudent));
        System.out.print("平均Java成绩为:"+String.format("%.2f",sumOfMarks/numOfStudent));
    }
}

在这里插入图片描述

package Ex1.Secondquestion;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author 15328
 * 2、使用Arrays类实现数组排序:使用java.util包中的Arrays类的类方法
 * public static void sort(double a[])
 * 可以把参数a指定的double类型数组按升序排序;
 * public static void sort(double a[], int start , int end)
 * 可以把参数a指定的double类型数组中从位置start到end位置的值按升序排序。
 * 给定数组int a[]={12,34,9,-23,45,6,90,123,19,45,34};
 * 从键盘读入一个整数,使用折半查找判断该整数是否在这个数组中,并将结果输出。
 */
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int a[]={12,34,9,-23,45,6,90,123,19,45,34};
        System.out.println("把参数a指定的double类型数组中从位置start到end位置的值按升序排序:");
        System.out.println("请输入startIndex和endIndex:");
        int startIndex = input.nextInt();
        int endIndex = input.nextInt();
        endIndex++;
        //sort:从索引值startIndex到索引值endIndex-1,所以在此对endIndex加一
        input.nextLine();
        Arrays.sort(a,startIndex,endIndex);
        System.out.printf("从%d到%d位置按照升序排序之后的数组为:", startIndex, endIndex - 1);
        System.out.println(Arrays.toString(a));
        System.out.println("把参数a指定的double类型的整个数组按升序排序后: ");
        Arrays.sort(a);
        System.out.println(Arrays.toString(a));
        System.out.println("请输入要查找的数字的个数:");
        int numOfSearch = input.nextInt();
        input.nextLine();
        int digitOfSearch;
        int digitJudge;
        while(numOfSearch > 0) {
            System.out.println("请输入要查询的数字:");
            digitOfSearch = input.nextInt();
            digitJudge = Arrays.binarySearch(a,digitOfSearch);
            if(digitJudge >= 0){
                System.out.print("在数组中找到了该数字,其在数组的索引值为:" + digitJudge);
            }
            else {
                System.out.printf("在数组中没有找到该数字,如果将它插入改数组," +
                        "则应该位于索引值为%d的位置", -(digitJudge + 1));
            }
            if(numOfSearch != 1){
                System.out.println();
            }
            numOfSearch--;
        }
    }
}

在这里插入图片描述

package Ex1.Thirdquestion;

import java.util.Scanner;

/**
 * @author 15328
 * *3、输出100~200之间的所有素数。
 */
public class Main {
    public  static int judgeOfPrimeNumber(int n){
        boolean isPrime = true;
        //2为素数
        if(n == 1 || (n % 2 == 0 && n != 2)) {
            //1不是素数、非2的偶数不是素数
            isPrime = false;
            //过滤掉1、4、6、8
        }
        for(int i = 3; i <= Math.sqrt(n); i += 2) {
            //从n为9的时候进入循环 3 5 7 全部素数
            //对9以及9以后的全部奇数做循环
            if(n % i == 0) {
                //非素数奇数
                isPrime = false;
                break;
            }
        }
        if(isPrime){
            return 1;
        }
        else{
            return 0;
        }
    }
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入起始数字和结束数字:");
        int startIndex = input.nextInt();
        int endIndex = input.nextInt();
        System.out.printf("从%d到%d之间的素数为:\n",startIndex,endIndex);
        int index = 0;
        for(int i = startIndex; i <= endIndex; i++) {
            if(judgeOfPrimeNumber(i)==1){
                index++;
                System.out.print(i+" ");
                if(index == 10){
                    System.out.println();
                    index = 0;
                }
            }
        }
    }
}

在这里插入图片描述

package Ex1.Forthquestion;

/**
 * @author 15328
 * *4、采用for循环求1至1000之内的所有“完全数”。
 * 所谓“完全数”是指一个数,恰好等于它的因子之和。
 * 例如,6是一个完全数,因为6的因子为1、2、3,而6=1+2+3。
 * 补充自百度百科:
 * 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。
 * 它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
 */
public class Main {
    public static void main(String[] args) {
       int sum = 0;
        int i = 2;
        int j = 1;
        for( i = 2; i <= 1000; i++) {
            for( j = 1; j < i; j++){
                if(i % j == 0) {
                    sum += j;
                }
            }
            if(sum == i) {
                System.out.print(sum + "  ");
            }
            sum = 0;
        }
    }
}

在这里插入图片描述

package Ex1.Fifthquestion;

/**
 * @author 15328
 * *5、已知XYZ+YZZ=532,
 * 其中X、Y和Z为数字,
 * 编程求出X,Y和Z的值。
 */
public class Main {
    public static void main(String[] args) {
        /*
          x*100+y*110+z*12=532
          x00+yy0+z0+2*z=532
          (x+y) (y+z+2*z/10) (2*z%10)
          (x+y) (y+z+z/5) (2*z%10)
          (x+y)*100 + (y+z*6/5)*10 + (2*z%10) == 532
           x>0 y>0 (x、y都做过百位数,必须大于零)
           z>0(z*12是532的末尾数2的唯一来源
           x+y<=5
           x>=1
           y>=1
           x<=4
           y<=4
           (532-2*z) % 10 == 0
           1=<z<10
         */
        int sum ;
        for(int z = 1; z < 10; z++) {
            if((532 - 2 * z) % 10 == 0) {
                for(int x = 1; x <= 4; x++) {
                    for(int y = 1; y + x <= 5; y++) {
                        sum = x*100+y*100;
                        sum += (y+z+z/5)*10 + (2*z)%10;
                        if(sum == 532) {
                            System.out.println("x: " + x + " y: " + y + " z: " + z);
                        }
                    }
                }
            }
        }
    }
}

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值