Java基础编程题(二)——循环和Scanner类的应用


前言

这几天一直在练习一些Java基础编程题,想记录一下每日的训练进度。欢迎大家来一起讨论。
代码里都有注释,如果有问题可以问我。

一、编写程序求一元二次方程的根。

import java.util.Scanner;

public class Homework01 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int[] arr = new int[4];
        for(int i=0;i<arr.length;i++){
            arr[i] = sc.nextInt();  //获取输入的数字
        }
        System.out.println("当前数组为:");
        printArray(arr);
        bubbleSort(arr);
        System.out.println("排序后的数组为:");
        printArray(arr);
    }
    //打印数组
    public static void printArray(int[] arr){   //形参arr,是a,b...都行,不影响
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
    //调用冒泡方法,对数组进行排序
    public static void bubbleSort(int[] arr){    //形参arr,是a,b...都行,不影响
        //第一次排序将最后一个数定为最小,第二次将倒数第二个数为第二小......
        for(int i=0;i<arr.length-1;i++){    //最后只剩一个数,无需排序
            //"-1"同上,最后一个数无需交换
            //“-i”第i+1(i初始为0,所以+1)轮排序后就少了一个数,第2轮就少两个
            for(int j=0;j<arr.length-i-1;j++){
                if(arr[j]<arr[j+1]){    //如果前一个数小于后二个数就交换
                    int x = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = x;
                }
            }
            System.out.println("第"+(i+1)+"轮排序后:");
            printArray(arr);
        }
    }
}

二、输入一个字符,判断它是否为字母,如果是小写字母,将它转换成大写字母,否则,不转换。

import java.util.Scanner;

public class Homework03 {
    public static void main(String[] args){
        //获取输入的字符
        Scanner sc = new Scanner(System.in);
        char a = sc.next().charAt(0);
        //判断输入的是不是字母,如果不是返回错误,如果是小写使他变为大写,如果是大写保持不变
        int n = a; //将a(字符型)转换为对应的ASCII码(int型)好进行判断
        //已知a-z对应的ASCII码为97-122
        if((n >= 97) && (n <= 122)){    //"&&"用法同"&",不过当前一个不成立时就不用算后一个了
            System.out.println("该字符为小写字母!");
            //已知对应的大小写相差32,所以在小写字母所对应的ASCII码上减去32就可以得到对应的大写字母的ASCII码了
            //int类型比char类型范围大,需要进行强制类型转换,例如:(char)n; n为int类型
            System.out.println("其转化为大写字母为:"+"\n"+(char)(n-32));
        }   //已知A-Z对应的ASCII码为65-90
        else if((n >= 65) && (n <= 90)){
            System.out.println("该字符为大写字母!其值为:"+"\n"+(char)n);    //将n强制类型转换为字符型
        }else {
            System.out.println("输入的字符不是字母");
        }
    }
}

三、输入 3 个正数,判断能否构成一个三角形。

import java.util.Scanner;

public class Homework04 {
    public static void main(String[]args){
        //获取输入的三条边的数据
        Scanner sc = new Scanner(System.in);
        System.out.println("第一条的边长:");
        int a = sc.nextInt();
        System.out.println("第二条的边长:");
        int b = sc.nextInt();
        System.out.println("第三条的边长:");
        int c = sc.nextInt();
        //判断输入的数是否为正数
        //"&&"用法同"&",不过当前一个不成立时就不用算后一个了
        if ((a > 0) && (b > 0) && (c > 0)){
            //如果都为正数,看是否满足成为三角形三条边的条件
            if(((a+b) > c) && ((a+c) > b) && ((b+c) > a)){
                System.out.println("可以构成一个三角形!");
            }else{
                System.out.println("无法构成一个三角形!");
            }
        }else {
            System.out.println("输入的数据有误!");
        }
    }
}

四、编写程序,对输入的年、月、日,给出该天是该年的第多少天?

import java.util.Scanner;

public class Homework05 {
    public static void main(String[] args){
        //获取输入的年、月、日数据
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年份:");
        int year = sc.nextInt();
        System.out.println("请输入月份:");
        int month = sc.nextInt();
        System.out.println("请输入是多少号:");
        int day = sc.nextInt();
        int days = 0;
        switch (month){
            //switch执行语句是从case n开始的(n为输入值),然后往下执行如果还是按以前的case1在第一个,输出的结果就会相反
            case 12:days+=30;
            case 11:days+=31;
            case 10:days+=30;
            case 9:days+=31;
            case 8:days+=31;
            case 7:days+=30;
            case 6:days+=31;
            case 5:days+=30;
            case 4:days+=31;
            case 3:
                if(year%4 == 0 || year%100 == 0){
                   days+=29;
            }else {
                   days+=28;
            }
            case 2:days+=31;
            case 1:days+=day;
            System.out.println("今天是"+year+"年的第"+days+"天!");
            break;
            default:System.out.println("输入的有误!");
            break;
        }

    }
}

五、编写程序,从键盘输入一个 0~99999 之间的任意数,判断输入的数是几位数?

import java.util.Scanner;

public class Homework06 {
    public static void main(String[] args){
        //获取输入的任意数
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个0~99999之间的任意数");
        int n = sc.nextInt();
        //判断他是否在取值范围内
        if(n/10000 >= 1 && n/10000 < 10){
            System.out.println(n+"是一个5位数");
        }else if(n/1000 >= 1 && n/1000 < 10){
            System.out.println(n+"是一个4位数");
        }else if(n/100 >= 1 && n/100 < 10){
            System.out.println(n+"是一个3位数");
        }else if(n/10 >= 1 && n/10 < 10){
            System.out.println(n+"是一个2位数");
        }else if(n/1 >= 1 && n/1 < 10){
            System.out.println(n+"是一个1位数");
        }else {
            System.out.println("输入的数有误!");
        }
    }
}

六、编写程序,给定一个学生成绩,给出相应等级:

90~100 优秀

80~89 良好

70~79 中等

60~69 及格

0~59 不及格

import java.util.Scanner;

public class Homework07 {
    public static void main(String[] args){
        //调用该类中的achievement()方法
        Homework07 p = new Homework07();    //此处是创建一个Homework07实例对象p来调用achievement方法
        p.achievement();
    }
    //创建一个类方法来实现功能
    //如果此处为static,则为静态方法,在主类中可以直接调用,例如:achievement();
    public void achievement(){
        //获取输入的学生成绩
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你的成绩:");
        int n = sc.nextInt();
        //判断学会成绩的优良
        if(n >= 90 && n<= 100)
        {
            System.out.println("优秀");
        }else if(n >= 80){
            System.out.println("良好");
        }else if(n >= 70){
            System.out.println("中等");
        }else if(n >= 60){
            System.out.println("及格");
        }else if(n >= 0){
            System.out.println("不及格");
        }else {
            System.out.println("输入的数有误!");
        }
    }
}

重点、关于String类的强制类型转换

这道题其实是蛮简单的,但是我之前不清楚该如何把int类型转换为String类型,所以花的时间有点多,不过我感觉收获是满满的。找到了好几种转化方法。以下方法详情可以搜https://www.jianshu.com/p/a22b95e48a15

1.(String)强制转换一式

Object obj = new Integer(100);
String str = (String)obj;
System.out.println(str);

【失败】
此种情况可以在语法检测上通过,但是运行后会报错:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

2.(String)强制转换二式

String str = (String)100;

【失败】
从图中提示可以发现,IDE直接报错,提示不能从int类型转换为java.lang.String类型。

3.String特殊转换

String str = "" + 100;
System.out.println(str);

【成功】
如果其中一个操作数表达式是String,那么对另一个操作数执行字符串转换,以在运行时产生一个字符串。
字符串连接的结果是对一个String对象的引用,该对象是两个操作数字符串的连接。左侧操作数的字符位于新创建的字符串中右侧操作数的字符之前。

4.Integer.toString(int i)方法

String str = Integer.toString(100);
System.out.println(str);

【成功】
使用的是int的包装类中实现的toString方法。

5.String.valueOf(int i)方法

String str = String.valueOf(100);
System.out.println(str);

【成功】
我在查看源代码时发现调用的是Integer中的toString方法,也就是4的方法。

public static String valueOf(int i) {
    return Integer.toString(i);
}

但是查看网上的资料中写的都是调用这个方法

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

原来String.valueOf()方法经过很多重载,可以通过传入的参数类型加以区分,从而调用相应的toString()方法进行类型转换。

题目:编写程序,对输入的一个整数,按相反顺序输出该数。例如,输入为 3578,输出为8753。

代码如下:

import java.util.Scanner;

public class Homework08 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        string(n);
        value(n);
        array(n);
        stringArray(n);
    }
    static void string(int n){
        //用int包装类中toString方法来讲int类型的n转换为String类型
        String str = Integer.toString(n);
        //要对字符串进行修改使用StringBuilder类
        StringBuilder sb = new StringBuilder(str);
        System.out.println("方法一:");
        //reverse()方法反转数组中元素的顺序
        System.out.println(sb.reverse());
    }
    static void value(int n){
        //要对字符串进行修改使用StringBuilder类
        //String.valueOf()方法经过很多重载,可以通过传入的参数类型加以区分,从而调用相应的toString()方法进行类型转换
        StringBuilder sb = new StringBuilder(String.valueOf(n));
        System.out.println("方法二:");
        //reverse()方法反转数组中元素的顺序
        System.out.println(sb.reverse());
    }
    static void array(int n){
        //这里是用了String的特殊转换
        //若“+”两侧至少有一个变量,不管是引用类型还是基本数据类型的变量,在编译时都会转换成调用StringBuilder对象调用append函数
        String str = n+"";
        //将字符串变量str转化为的数组赋值给数组变量a
        char[] a = str.toCharArray();
        //创建temp字符串,要对字符串进行修改使用StringBuilder类
        StringBuilder temp= new StringBuilder();
        for (int i=a.length-1;i>=0;i--){
            //使用append()方法来添加反序的数组进入temp字符串
           temp.append(a[i]);
        }
        System.out.println("方法三:");
        System.out.println(temp);
    }
    //融合怪
    static void stringArray(int n){
        String str = Integer.toString(n);
        char[] arr = str.toCharArray();
        StringBuilder sb = new StringBuilder();
        for(int i=arr.length-1;i>=0;i--){
            sb.append(arr[i]);
        }
        System.out.println("方法四:");
        System.out.println(sb);
    }
}

版权声明:本文为huigun原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。