学习笔记02-第三章 方法
用书参考:孙连英,刘畅,彭涛所著的Java面向对象程序设计。
我的所有代码你都可以通过GitHub获取,
以下为我的GitHub地址:[[https://github.com/MrNeoJeep/java-code.git]]
(1)摄氏温度与华氏温度的转换
代码
import java.util.Scanner;
public class Text3_1 {
public static void main(String[] args) {
//产生错误:java.util.NoSuchElementException
// at java.base/java.util.Scanner.throwFor(Scanner.java:937)
// at java.base/java.util.Scanner.next(Scanner.java:1594)
// at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
// at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
// at demo/demo.USTS.chapter3.Text3_1.main(Text3_1.java:21)
// 查阅资料得知:这个错误出现在定义Scanner的时候,如果在两个函数中同时定义 Scanner 并且都写了 close() 函数,
// 在运行过程中如果有一个 close() 函数被执行,再次使用 Scanner 时将会产生该错误。
// 原因可能是由于使用close()函数时会关闭所有的Scanner关闭(待查看文档)。
// 所以只用在全部执行结束后再使用 close() 函数去关闭Scanner。
//摄氏温度与华氏温度的转换
System.out.println("-----------菜单---------");
System.out.println("--1、摄氏温度转换为华氏温度--");
System.out.println("--2、华氏温度转换为摄氏温度--");
System.out.println("--3、退出 --");
System.out.println("-----------菜单---------");
Scanner sc = new Scanner(System.in);
boolean flag = true;
int key = 0 ;
while(flag)
{
System.out.println("请输入你的选择");
key = sc.nextInt();
// if(key == 1)
// {
// C_to_F();
// }
// else if(key == 2)
// {
// F_to_C();
// }
// else if(key == 3)
// {
// flag = false;
// System.out.println("欢迎下次使用!~~~");
// sc.close();
// break;
// }
// else
// {
// System.out.println("输入错误,请重新输入");
// }
switch (key)
{
case 1:
C_to_F();
break;
case 2:
F_to_C();
break;
case 3:
flag = false;
System.out.println("欢迎下次使用!~~~");
sc.close();
break;
default:
break;
}
}
}
//1、实现1号菜单的任务
public static void C_to_F()
{
Scanner scanner = new Scanner(System.in);
System.out.println("请输入摄氏温度:");
String num = scanner.next();
float C = Float.parseFloat(num);
if(C < -273.15)
{
System.out.println("输入错误");
scanner.close();
return;
}
float F ;
F = C * ((float)9/5) + (float)32;
System.out.printf("%.2f摄氏度对应的华氏度为:%.2f\n",C,F);
//scanner.close();注释掉此行即不报错
}
//2、实现2号菜单的任务
public static void F_to_C()
{
Scanner scanner2 = new Scanner(System.in);
System.out.println("请输入一个华氏温度:");
String num = scanner2.next();
float F = Float.parseFloat(num);
if(F < -459.67)
{
System.out.println("输入有误");
scanner2.close();
return;
}
float C;
C = (F - 32)*((float)5/9);
System.out.printf("%.2f华氏度对应的摄氏度为:%.2f\n",F,C);
//scanner2.close();注释掉此行即不报错
}
期间,我遇到了以下错误
查阅资料得知:这个错误出现在定义Scanner的时候,如果在两个函数中同时定义 Scanner 并且都写了 close() 函数,在运行过程中如果有一个 close() 函数被执行,再次使用 Scanner 时将会产生该错误。原因可能是由于使用close()函数时会关闭所有的Scanner关闭(待查看文档)。所以只用在全部执行结束后再使用 close() 函数去关闭Scanner。
运行结果
(2)编写方法reverseDigit,将一个整数作为参数,并反向返回该数字。
代码
import java.util.Scanner;
public class Text3_2 {
public static void main(String[] args) {
//编写方法reverseDigit,将一个整数作为参数,并反向返回该数字。
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数");
int num = scanner.nextInt();
int resu = reverseDigit(num);
System.out.println("反转之后的数为:"+ resu);
scanner.close();
}
public static int reverseDigit(int num)
{
int res = 0;
if(num == 0)
{
return 0;
}
while(num != 0)
{
int pop = num % 10;
num /= 10;
res = res * 10 + pop;
}
return res;
}
运行结果
(3)斐波那契数列
要求:编写程序,一列数的规律如下:1、1、2、3、5、8、13、21、34……求这列数的第三十位是多少。
代码
import java.util.Scanner;
public class Text3_3 {
public static void main(String[] args)
{
//题目要求:编写程序,一列数的规律如下:1、1、2、3、5、8、13、21、34……求这列数的第三十位是多少。
//斐波那契数列
Scanner scanner = new Scanner(System.in);
System.out.println("请输入项数:");
int n = scanner.nextInt();
System.out.println("第" + n + "项为:" + fibo(n));
scanner.close();
}
//使用递归来实现
static int fibo(int n)
{
if(n == 0 || n == 1)
{
return n;
}
else
{
return fibo(n-1) + fibo(n -2);
}
}
运行结果
(4)编写方法distance,计算笛卡尔平面中两点(x1,y1),(x2,y2)间的距离。
代码
import java.util.Scanner;
public class Text3_4{
public static void main(String[] args) {
//编写方法distance,计算笛卡尔平面中两点(x1,y1),(x2,y2)间的距离。
//此方法将表示平面上两个点4个数作为他的参数,并返回两点间的距离
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个坐标(请使用英文逗号分隔):");
String first = sc.next();
System.out.println("请输入第二个坐标(请使用英文逗号分隔):");
String second = sc.next();
String [] arr1 = first.split("\\,");
String [] arr2 = second.split("\\,");
double x1 = Double.parseDouble(arr1[0]);
double y1 = Double.parseDouble(arr1[1]);
double x2 = Double.parseDouble(arr2[0]);
double y2 = Double.parseDouble(arr2[1]);
double d = distace(x1, y1, x2, y2);
System.out.println("两点间的距离为:" + d);
sc.close();
}
public static double distace(double x1,double y1,double x2,double y2)
{
double d;
double temp = (x1 - x2)*(x1 - x2)+(y1 - y2)*(y1 -y2);
d = Math.sqrt(temp);
return d;
}
运行结果
(5)编写程序,随机产生100个09的数,统计09每个数出现的概率
代码
public class Text3_5 {
public static void main(String[] args) {
//编写程序,随机产生100个0~9的数,统计0~9每个数出现的概率
double[] arr = times();
for(int i = 0;i < 9;i++)
{
System.out.println("数字" + i + "的概率为:" + arr[i]);
}
}
public static double[] times()
{
int count0 = 0;
int count1 = 0;
int count2 = 0;
int count3 = 0;
int count4 = 0;
int count5 = 0;
int count6 = 0;
int count7 = 0;
int count8 = 0;
int count9 = 0;
for(int i = 0;i < 100 ;++i)
{
int num = (int)(Math.random() *10);
switch (num) {
case 0:
count0++;
break;
case 1:
count1++;
break;
case 2:
count2++;
break;
case 3:
count3++;
break;
case 4:
count4++;
break;
case 5:
count5++;
break;
case 6:
count6++;
break;
case 7:
count7++;
break;
case 8:
count8++;
break;
case 9:
count9++;
break;
default:
break;
}
}
double [] arr = new double[10];
arr[0] = (double)count0/100;
arr[1] = (double)count1/100;
arr[2] = (double)count2/100;
arr[3] = (double)count3/100;
arr[4] = (double)count4/100;
arr[5] = (double)count5/100;
arr[6] = (double)count6/100;
arr[7] = (double)count7/100;
arr[8] = (double)count8/100;
arr[9] = (double)count9/100;
return arr;
}
运行结果
这样打表的写法容易想,但是太繁琐了。可以用一个定义一个数组array,当输入的是数字是i时,则array[i]++,接下来怎么算就很简单了,这里给出一种思路,就不具体实现了,比较简单,大家可以尝试一下。
写在最后,如果你对于以上问题有更好的解答,请在评论区告诉我