Java题库练习4

目录

学习-Java位运算之移位运算

学习-Java继承和多态之方法重载

数组与方法

第1关:倒转数组

第2关:消除重复

第3关:大整数加法


学习-Java位运算之移位运算

本关任务:

  1. 将 -20 到 -11 中的整数经过 << 运算符向左移动 2 位(包括 -20 和 -11);

  2. 将 -10 到 9 中的整数经过 >>> 运算符向右移动 1 位(包括 -10 和 9);

  3. 将 10 到 20 中的整数经过 >> 运算符向右移动 3 位(包括 10 和 20);

  4. 将上述结果依次输出(顺序为从 -20 到 10)。

输出例子:将-20经过<<运算符向左移动2位后的结果为-80

写代码不想打字的话,就直接按照测试集的答案复制粘贴。


/**
 * 任务:对-20到20的数字按照要求进行运算。
 * 类名为:BitwiseOperation
 */

public class BitwiseOperation {
    public static void main(String[] args) {
    	
        // 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
        /********** Begin **********/
    	
        // 第一步:定义一个 for 循环,设置起始值
        for(int i=-20;i<=20;i++){
            if(i>=-20&&i<=-11){
                System.out.printf("将%d经过<<运算符向左移动2位后的结果为%d\n",i,i<<2);
                }
            else if(i>=-10&&i<=9){
                System.out.printf("将%d经过>>>运算符向右移动1位后的结果为%d\n",i,i>>>1);
            }
            else if(i>=10&&i<=20){
                System.out.printf("将%d经过>>运算符向右移动3位后的结果为%d\n",i,i>>3);
            }
        }
    	// 第二步:判断该值属于哪个区间,进行相应的运算
				


        /********** End **********/

    }
}

学习-Java继承和多态之方法重载

本关任务:使用重载方法为 Student 类创建三个构造方法。

关键是看懂题目,明白要你写的是什么。全是内容,无技巧。

/**
 * 任务:使用重载方法为 Student 类创建三个构造方法。
 * 类名为:Student
 */

public class Student {
    private String name;  // 学生的姓名
    private String num;  // 学生的学号信息
    private double grades;  // 学生的成绩
    // 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
    /********** Begin **********/
    // 创建一个有参构造函数,携带一个学生姓名的参数
    public Student(String name){
        this.name=name;
    }


    // 创建一个有参构造函数,携带学生姓名和学生学号信息的参数
    public Student(String name,String num){
        this.name=name;
        this.num=num;
    }


    // 创建一个有参构造函数,携带学生姓名、学生学号和学生成绩信息的参数
    public Student(String name,String num,int grades){
        this.name=name;
        this.num=num;
        this.grades=grades;
    }



    /********** End **********/
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNum() {
        return num;
    }

    public void setNum(String num) {
        this.num = num;
    }

    public double getGrades() {
        return grades;
    }

    public void setGrades(double grades) {
        this.grades = grades;
    }
    
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", num='" + num + '\'' +
                ", grades=" + grades +
                '}';
    }
    
}

数组与方法

第1关:倒转数组

本关任务:掌握如何将数组作为参数,传递给方法,并编写一个方法,提供倒转数组的功能。

见代码

package step1;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        int[] a = new int[num];
        for (int i=0;i<a.length;i++){
            a[i] = input.nextInt();
        }
        reverse(a);
        for (int i=0;i<a.length;i++){
            System.out.print(String.format("%d ",a[i]));
        }
    }

    //请在指定位置填写代码。
    /********* Begin *********/
    public static void reverse(int[] b){
        Scanner input = new Scanner(System.in);
        int mid=b.length/2;
        int t;
        for (int i=0;i<mid;i++){  //以中间的数为对称轴,交换对称轴两边的数
            t=b[i];
            b[i]=b[b.length-i-1];
            b[b.length-i-1]=t;
        }
    }

    /********* End *********/
}

第2关:消除重复

本关任务:继续练习如何灵活使用数组以及方法来解决实际问题,并编写一个方法,接收一个数组作为参数,返回不含重复元素的数组。

思路:用一个数组接收原数组中不重复的数字,有一些细节问题,注意一下。

详细思路见代码

package step2;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        int [] a = new int[num];
        for (int i=0;i<a.length;i++){
            a[i] = input.nextInt();
        }
        int [] r = getSet(a);
        for (int i=0;i<r.length;i++){
            System.out.print(String.format("%d ",r[i]));
        }
    }

    //请在指定位置填写代码。
    /********* Begin *********/
    public static int[] getSet(int[] a){
        int[] array=new int[a.length];  //用来接收去重后的a[]数组
        array[0]=a[0];  //存第一个元素
        int flag=0,n=1;  //flag标记是否该数字已经出现
        for (int i=0;i<a.length;i++){
            for(int j=0;j<n;j++){  //遍历已经保存的数字
                if(array[j]==a[i]){
                    flag=1;  //该数字已出现
                    break;
                }
            }
            if(flag==0){
                array[n++]=a[i];  //该数字未出现,保存
            }
            flag=0;
        }
        int[] ans=new int[n];  //因为array[]的个数不符合要求
        for(int i=0;i<n;i++)
            ans[i]=array[i];
        return ans;
    }
    /********* End *********/
    
}

第3关:大整数加法

难的一道

本关任务:利用所学数组的方法使用技巧以及进位加法的知识,编程实现解决大整数相加的问题。

先说思路:将字符串逆序存入整型数组,然后每个位置对应相加,注意进位问题,最后在转化为字符串返回。

参考链接:怎样实现大整数相加?_大整数加法-优快云博客

(超详细的解题思路,一看就懂,有图有说明)

有几点要注意:

1.String的使用方法

        (1)长度;(2)单个字符引用

参考详细链接:Java【String类】的详解_java string_快到锅里来呀的博客-优快云博客

2.StringBuilder和StringBuffer

             常规的整型转化为String方法效率低,很不方便

StringBuilder类:字符缓冲区,可以提高字符串的效率

StringBuilder的常用方法:
public StringBuilder append(…):添加任意类型数据的字符串形式,并返回当前对象自身

package step3;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String n1 = input.nextLine();
        String n2 = input.nextLine();
        String result = add(n1,n2);
        System.out.println(result);
        
    }

    //请在指定位置填写代码。
    /********* Begin *********/
    public static String add(String a,String b){
        int n=a.length()>b.length()?a.length():b.length();  //长度
        int aa[]=new int[n+1],bb[]=new int[n+1];
        //逆序存数字
        for(int i=0;i<a.length();i++){
            aa[i]=a.charAt(a.length()-1-i)-'0';
        }
        for(int i=0;i<b.length();i++){
            bb[i]=b.charAt(b.length()-1-i)-'0';
        }
        //从数字的末尾开始相加,即数组从头开始相加
        int temp,ans[]=new int[n+1];
        for(int i=0;i<n;i++){
            temp=aa[i]+bb[i]+ans[i];
            if(temp>9){
                ans[i+1]=1;
                ans[i]=temp-10;
            }
            else{
                ans[i]=temp;
            }
        }
        //把ans数组再次逆序并转成String
        StringBuilder res = new StringBuilder();
         //用于标记是否找到大整数的最高有效位
        boolean findFirst = false;
        for (int i=ans.length-1; i>=0; i--) {//从后往前
            if(!findFirst){
                if(ans[i] == 0){				//用于跳过结果数组末尾的0
                    continue;
                }
                findFirst = true;
            }
            res.append(ans[i]);
        }
        return res.toString();
    }

    /********* End *********/
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值