今天是豆包教我学Java的第一天,废话不多说直接开始。
1.每日题目:
基础语法与数据类型
- 题目:编写一个 Java 程序,从控制台读取两个整数,然后计算它们的和、差、积、商,并输出结果。
- 题目:编写一个程序,定义一个字符变量并赋值,然后将该字符转换为对应的 ASCII 码并输出。
- 题目:编写一个程序,声明一个布尔变量,根据不同的条件给它赋值,然后输出布尔变量的值。
2.题目一:编写一个 Java 程序,从控制台读取两个整数,然后计算它们的和、差、积、商,并输出结果。
这个题目开始我不知道怎么输入值,于是问豆包:
问:怎么输入值?
答:
import java.util.Scanner;public class ScannerInputExample {public static void main(String[] args) {// 创建 Scanner 对象Scanner scanner = new Scanner(System.in);// 读取整数System.out.print("请输入一个整数: ");int num = scanner.nextInt();System.out.println("你输入的整数是: " + num);// 消耗掉 nextInt() 遗留的换行符scanner.nextLine();// 读取字符串System.out.print("请输入一个字符串: ");String str = scanner.nextLine();System.out.println("你输入的字符串是: " + str);// 读取浮点数System.out.print("请输入一个浮点数: ");double d = scanner.nextDouble();System.out.println("你输入的浮点数是: " + d);// 关闭 Scanner 对象scanner.close();}
}
- 导入
Scanner
类:在代码开头,使用import java.util.Scanner;
语句导入Scanner
类。 - 创建
Scanner
对象:通过Scanner scanner = new Scanner(System.in);
创建一个Scanner
对象,用于从标准输入读取数据。 - 读取不同类型的数据:
nextInt()
:用于读取整数。nextLine()
:用于读取一行字符串。nextDouble()
:用于读取浮点数。-
scanner.next().charAt(0):用于读取字符
- 关闭
Scanner
对象:使用完Scanner
对象后,调用scanner.close();
方法关闭它,以释放资源。
问:String[] args是干什么的
答:
String[] args
是一个字符串数组,它用于接收在命令行中运行 Java 程序时传递给程序的参数。当你在命令行中执行 Java 程序时,可以在程序名后面添加一系列由空格分隔的参数,这些参数会被存储在args
数组中。
问:Scanner scanner = new Scanner(System.in);是干什么的
答:
这行代码的主要功能是创建一个 Scanner
对象,这个对象能够从标准输入流里读取数据。在 Java 中,标准输入流一般指的就是键盘输入,所以借助这个 Scanner
对象,程序就可以获取用户通过键盘输入的信息。实则是创建了一个名字为scanner的类。
问:求a-b的绝对值怎么求
答:
Math.abs(a - b);
问:怎么输出换行
System.out.println("a - b 的绝对值是:");将print换成println。
问:将整数a转化为double
答:
强制转换:
double b = (double) a;
初步完成代码:
import java.util.Scanner;
public class Main{public static void main(String[] args){Scanner scanner=new Scanner(System.in);System.out.println("请输入数值a,b");int a=scanner.nextInt();int b=scanner.nextInt();System.out.print("两数之和为:");System.out.println(a+b);//System.out.print(result);System.out.print("两数之差为:");System.out.println(a-b);System.out.print("两数之积为:");System.out.println(a*b);System.out.print("两数之商为:");System.out.print((double)a/b);}
}
我发给豆包看,他给出了一些意见:
优点
- 功能实现:代码准确地实现了基本的数学运算功能,通过
Scanner
类获取用户输入的两个整数,然后分别计算并输出它们的和、差、积、商,逻辑清晰,符合题目的要求。 - 输入处理:使用
Scanner
类来处理用户的输入,这是 Java 中常用的获取用户输入的方式,方便且易用。 - 商的处理:在计算两数之商时,使用
(double)a/b
进行强制类型转换,确保计算结果为浮点数,避免了整数除法导致的精度丢失问题。
可优化之处
- 异常处理:代码没有对用户输入进行异常处理。如果用户输入的不是有效的整数,程序会抛出
InputMismatchException
异常并终止。可以添加异常处理机制,增强程序的健壮性。 - 除数为零的情况:在计算两数之商时,没有考虑除数
b
为零的情况。当b
为零时,会抛出ArithmeticException
异常。应该在计算商之前进行判断,避免出现这种异常。 - 代码结构:可以将计算和输出的逻辑封装成方法,提高代码的可读性和可维护性。
- 资源管理:在使用完
Scanner
对象后,应该调用scanner.close()
方法关闭它,以释放系统资源。
按照他给的优化我们将代码继续优化:
最终代码:
import java.util.Scanner;import java.util.InputMismatchException;
public class Main{public static void main(String[] args){Scanner scanner=new Scanner(System.in);int a=0;int b=0;try {System.out.println("请输入数值a,b");a = scanner.nextInt();b = scanner.nextInt();System.out.print("两数之和为:");System.out.println(a+b);//System.out.print(result);System.out.print("两数之差为:");System.out.println(a-b);System.out.print("两数之积为:");System.out.println(a*b);System.out.print("两数之商为:");System.out.print((double)a/b);}catch(InputMismatchException e) {//处理异常System.out.println("输入无效,请输入有效的整数");}finally{scanner.close();}}
}
这样我将代码异常处理和除数为0的情况都解决了,还使用了调用 scanner.close()
关闭结尾。
3.题目二:编写一个程序,定义一个字符变量并赋值,然后将该字符转换为对应的 ASCII 码并输出。
问:字符怎么输入?
答:
这个题目写的时候有一个地方报错:
a = scanner.nextInt();
原因是字符的输入要变成:
a=scanner.next().charAt(0);
接着我写出了
初始代码:
import java.util.Scanner;
import java.util.InputMismatchException;
public class Main
{public static void main(String[] args){Scanner scanner=new Scanner(System.in);char a;try {System.out.println("请输入字符:");a=scanner.next().charAt(0);System.out.println("转换为阿斯克码值为:");System.out.print(a-'0');}catch(InputMismatchException e) {System.out.println("输入有误,请重新输入!");}finally {scanner.close();}}
}
豆包评价:
优点
- 功能实现思路正确:整体思路是正确的,使用
Scanner
类从用户输入读取字符,并且尝试将其转换为 ASCII 码值输出。 - 异常处理:使用了
try-catch
块来捕获InputMismatchException
异常,当用户输入不匹配时会给出相应的错误提示,增强了程序的健壮性。 - 资源管理:在
finally
块中调用了scanner.close()
方法来关闭Scanner
对象,避免了资源泄漏。
存在的问题
- 转换逻辑错误:代码中使用
a - '0'
来计算 ASCII 码值,这是错误的。'0'
代表字符0
的 ASCII 码值,当你用字符a
减去'0'
时,得到的并不是字符a
的 ASCII 码值。实际上,在 Java 中,char
类型可以直接转换为int
类型,从而得到其对应的 ASCII 码值,正确的做法是使用(int)a
。 - 拼写错误:在输出提示信息时,“阿斯克码” 存在拼写错误,正确的表述是 “ASCII 码”。
- 输出换行问题:
System.out.print(a - '0');
使用的是print
方法,该方法不会自动换行,如果想要输出结果后换行,建议使用println
方法。
改进:
我把a-'0'改成了(int)a;
最终代码:
import java.util.Scanner;
import java.util.InputMismatchException;
public class Main
{public static void main(String[] args){Scanner scanner=new Scanner(System.in);char a;try {System.out.println("请输入字符:");a=scanner.next().charAt(0);System.out.println("转换为阿斯克码值为:");System.out.println((int)a);}catch(InputMismatchException e) {System.out.println("输入有误,请重新输入!");}finally {scanner.close();}}
}
4.题目三:编写一个程序,声明一个布尔变量,根据不同的条件给它赋值,然后输出布尔变量的值。
初始代码:
//题目:编写一个程序,声明一个布尔变量,根据不同的条件给它赋值,然后输出布尔变量的值。
import java.util.Scanner;
import java.util.InputMismatchException;
public class Main
{public static void main(String[] args){Scanner asd=new Scanner(System.in);boolean a=true;int b;int c;try{System.out.println("请输入两个数:");b=asd.nextInt();c=asd.nextInt();int d=b-c;if(d>0){a=true;}else if(d<0){a=false;}System.out.println(a);}catch(InputMismatchException e){System.out.println("输入有误,请重新输入!");}finally{asd.close();}}
}
可优化之处
- 变量命名:变量名
asd
没有明确的含义,不利于代码的阅读和维护。建议使用更具描述性的变量名,如scanner
。 - 初始赋值冗余:布尔变量
a
初始赋值为true
,但后续在if - else if
语句中会重新赋值,所以初始赋值可以省略。 else if
可简化:由于d
只有大于 0、小于 0 和等于 0 三种情况,这里可以将else if
简化为else
。- 差值为 0 的情况:代码中没有处理
d
等于 0 的情况,可以根据需求添加相应的逻辑。
最终代码:
import java.util.Scanner;
import java.util.InputMismatchException;
public class Main
{public static void main(String[] args){Scanner asd=new Scanner(System.in);boolean a;int b;int c;try{System.out.println("请输入两个数:");b=asd.nextInt();c=asd.nextInt();int d=b-c;if(d>=0){a=true;}else{a=false;}System.out.println(a);}catch(InputMismatchException e){System.out.println("输入有误,请重新输入!");}finally{asd.close();}}
}