文章目录
前言
这几天一直在练习一些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);
}
}