18/3/12 学习总结

(一)学习总结

1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明。
2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明。
3.运行下列程序,结果是什么?查阅资料,分析为什么。

public class Test {
public static void main(String args[]) {
double a = 0.1;
double b = 0.1;
double c = 0.1;
if((a + b + c) == 0.3){
System.out.println("等于0.3");
}else {
System.out.println("不等于0.3");
}
}
}
为了处理精度损失的问题,可以使用java.math.BigDecimal类,查阅JDK帮助文档或教材p378,对上述程序进行修改。
package 日常瞎写;
import java.util.;
import java.math.BigDecimal;
public class Xiaxie {
public static void main(String args[]) {
double b = 0.1;
double c = 0.1;
double sum=0;
sum=Math.round(Math.add(0.1,0.1,0.1),1);
System.out.println(sum);
if(sum==0.3){
System.out.println("等于0.3");
}else {
System.out.println("不等于0.3");
}
}
}
class Math{
public static double add(double a1,double a2,double a3){
BigDecimal x1=new BigDecimal(a1);
BigDecimal x2=new BigDecimal(a2);
BigDecimal x3=new BigDecimal(a3);
return x1.add(x2).add(x3).doubleValue();
}
public static double round(double d,int len){
BigDecimal x1=new BigDecimal(d);
BigDecimal x2=new BigDecimal(1);
return x1.divide(x2,len,BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
4.本次学习要点中其他需要总结的内容:因人而异,根据自己的学习情况,记录难掌握或难理解的内容,以及学有心得的内容。还存在哪些问题,也可以提出来,对于同学在博客中提出的问题,大家可以积极讨论,互帮互学。
作业:(一)
1.首先创建一个Scanner对象s,构造函数的初始值为System.in,再利用s.nextInt()来接收一个int型数据ival的值,用s.nextLine()来接收String类型的name,然后分别输出。
package 日常瞎写;
import java.util.
;
public class Xiaxie {

public static void main(String[] args) {
	int a;
	Scanner input=new Scanner(System.in);
	   System.out.println("请输入个值a:");
	  a=Integer.parseInt(input.next());
	/*Scanner input = new Scanner(System.in);
	System.out.println("请输入a:");
	a= input.nextInt();*/
	System.out.print("a:"+a);
	
}		

}
我尝试用两种方法输出/----/中也是方法之一,如果是一维数组二维数组加上循环就可以了。
2.Math.random()返回的只是从0到1之间的小数,如果要50到100,就先放大50倍,即0到50之间,这里还是小数,如果要整数,就强制转换int,然后再加上50即为50~100.
Random内Random rand=new Random();int a;a=rand.nextInt(100)+1;a是随便设定的,(100)+1给的是范围1-100内的随机数。
3.答案为不等于0.3,double是双精度类型 不是什么小数类型,在标称语言里,float和double都不是精确地值,float a=1可能存的数值是0.999999,java里有类可以解决此类问题。
4.我的c语言底子很差,感觉java写起来有些费劲,不过java便利的是引用类可以节省我们很大的功夫,比如sort排序,不用自己排序系统就自动的帮你了,java有很多类,以后我会用得着,不过现在我还没看
马上就要接触面对对象这个问题了,我决定这学期无论java语言有多困难,我也不会抄袭别人的程序,磕磕绊绊也好,停滞不前也好,我想要自己完成我的java结课设计。

(二)实验总结

实验内容:
1.看商品猜价格
2.万年历
3.评分系统
对完成实验内容过程中遇到的问题、解决方案以及程序的设计思路和思考等进行归纳总结。
格式如下:
程序设计思路:XXXXXXX
问题1:XXXXXXX
原因:XXXXXXX
解决方案:XXXXXXX
问题2:XXXXXXX
原因:XXXXXXX
解决方案:XXXXXXX
(二):
1代码:
import java.util.Random;
import java.util.Scanner;
import java.util.;//util类型的类统统可以用.表示

public class Demo {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	Scanner in=new Scanner(System.in);//Scanner是一个类,扫描从控制台输入的字符;简单来说是c语言中的scanf;
	Scanner input=new Scanner(System.in);
	Random rand=new Random();//创建一个随机对象rand,rand可以为任意字母
	int x,a,b=0,c,answer=0,q=0;
	String str=null;
	q=rand.nextInt(100)+1;//给定商品的随机价格:q;
//	System.out.println(q);
	String an="y";//对do while循环的判断定义y;
	do{
		
		go:for(int i=0;i<=4;i++){
			System.out.print("请输入一个价格");
			a=Integer.parseInt(input.next());//Integer.parseint()就是把整形对象Integer转换成基本数据类型int(整数);
			//input.next是接受键盘的数据,还是懵逼,总之是得到自己想要输入的数就对了
			b++;
			if(a>q){
				System.out.println("too large");
			}
			else if(a<q){
				System.out.println("too little");
			}
			else if(a==q){
				System.out.println("恭喜您,答对了");
				break go;
			}
			//break后加空格在加go;go:指向的位置为自己想要跳出的循环 
		}
		System.out.println("您用光了所有机会");	
		System.out.println("您总共猜了"+(b)+"次");
		System.out.println("是否继续,继续请输入y");
		an=input.next();
	}while("y".equals(an));
	
	
	if(b>5)
	{
		answer=0;
	}
	else if(b>=0&&b<=5){
	answer=100-20*b;
	}
	System.out.println("答案为:"+q);
	System.out.println("您的分数为:"+answer);
}

}
我的设计思路是先给定一个100以内的随机数,然后用do-while循环判断是否猜对了价格,最后判断是否继续,这个没有太大的问题,就是总是写错大小写。

package 万年历;
import java.util.*;
public class Demo2 {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	int year, month, x,sum=0;
	Scanner input = new Scanner(System.in);
	System.out.println("请输入年:");
	year = input.nextInt();
	System.out.print("请输入月份:");
	month = input.nextInt();
	int day = 0;
	int firstday = 0;
	int days = 0;
	
	
if(isLeap(year)){
	System.out.println(""+year+"是闰年");
}
else{
	System.out.println(""+year+"不是闰年");
}

day=days(year,month);
System.out.println(year+"年"+month+"月有"+day+"天");
printCalender(year,month);

}
public static boolean isLeap(int year) { // 判断闰年

	if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
		return true;
	}
	else
		return false;
}

public static int days(int year, int month) { // 判断某年某月有多少天
int days=0;
if (month == 2) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
days = 29;
}
else {
days = 28;
}
}
else if (month == 4 || month == 6 || month == 9 || month == 11) {
days = 30;
}
else {
days = 31;
}
return days;
}
public static void printCalender(int year, int month) { // 计算某年某月之前距1900年1月1日的天数
int x,sum=0;
int day=0;
for (int i = 1900; i < year; i++) { // 计算1900年1月1日的天数
if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) {
day = day + 366;
} else {
day = day + 365;
}
}
int beforedays = 0;
for (int i = 1; i < month; i++) {
if (i == 2) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
sum += 29;
}
else {
sum += 28;
}
}
else {
if (i == 4 || i == 6 || i == 9 || month == 11) {
sum += 30;
}
else {
sum += 31;
}
}
}
int days = 0;
if (month == 2) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
days = 29;
}
else {
days = 28;
}
}
else if (month == 4 || month == 6 || month == 9 || month == 11) {
days = 30;
}
else {
days = 31;
}
System.out.println("");
int temp =sum % 7;
/* 输出日历 */
System.out.println("星期日 星期一 星期二 星期三 星期四 星期五 星期六");
for (int i = 1; i < temp; i++) {
System.out.print(" ");
}
for(int i=1;i<=days;i++){

		if(sum%7==0){
			System.out.print(i+"
");
		}
		else{
			System.out.print(i+"	");
		}
		sum+=1;
	}
	System.out.println("");
	day=sum+day; 
	System.out.println(""+year+"年"+month+"月距1900年1月1日的天数为"+day+"天");
}

}
我打算按照c语言的发法来,所以调用函数以及日期都是按照c语言来的,判断的时候布尔函数让我很是头疼,因为不知道怎么调用,最后不得不百度。
问题一:布尔函数不知道怎么返回值,也不知道怎么用
原因:boolean的返回值只有true和flase
解决方法:我让返回值为true或者flase调用的时候用if语言直接用函数名,if为真,判断为闰年。

3.package 评分系统;
import java.util.Arrays;
import java.util.*;
class Demo3 {

public static void main(String[] args) {
    int arr[][];
	arr=new int[5][10];
	Random rand=new Random();
	  for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                arr[i][j] = new Random().nextInt(10)+1;
            }
      }
    System.out.println("排序前:");
    for(int i=0;i<arr.length;i++){
		  System.out.print("选手"+(i+1)+":	");
		  for(int j=0;j<arr[i].length;j++){
			  System.out.print(arr[i][j]+"	");
		  }
		  System.out.println("");
	  } 
    for (int[] is : arr) {
        sort(is);
    }
   int paixu[]=new int[10];
   int ave=0;
    System.out.println("排序后:");  
    for(int i=0;i<arr.length;i++){
    	int sum=0;
		  System.out.print("选手"+(i+1)+":	");
		  for(int j=0;j<arr[i].length;j++){
			  System.out.print(arr[i][j]+"	");
			  sum=sum+arr[i][j];
			 
			
		  }
		  ave=sum/arr[i].length;
		  System.out.print("平均值为:"+ave+"	");
			// paixu[i]=float (ave);
		  System.out.println("");
		  
	  } 
//	System.out.println("sum="+sum);
    System.out.println("去掉每位选手的最高分和最低分");
    for(int i=0;i<arr.length;i++){
		  System.out.print("选手"+(i+1)+":	");
		  for(int j=1;j<arr[i].length-1;j++){
			  System.out.print(arr[i][j]+"	");
		  }
		  System.out.println("");
	  }  
    int x,y;
    
  
    for (int i= 0; i < 5; i++) {
		System.out.print("第" + (i + 1) + "行最大值:	");
		System.out.print(hasmax(arr[i], arr[i].length));
	}
	System.out.println();
	for (int i= 0; i < 5; i++) {
		System.out.print("第" + (i + 1) + "行最小值:	");
		System.out.print(hasmin(arr[i], arr[i].length));
	}
	System.out.println();
	
/*	for (int i= 0; i < 5; i++) {
		System.out.print(hasave(arr[i],arr[i].length));
	}*/
}

private static void sort(int[] is) {

    for (int i = 0; i < is.length - 1; i++) {
        for (int j = i; j < is.length; j++) {
            if (is[i] > is[j]) {
                int tmp = is[i];
                is[i] = is[j];
                is[j] = tmp;
            }
        }
    }
}

/* public static void max(int[][] arr2){
int arr[][]=new int[5][];
int a[]=new int[5];
System.out.println("asdada");
for(int i=0;i<arr.length;i++){

		  for(int j=1;j<arr[i].length-1;j++){
			  if(arr[i][j]>a[i]){
				  a[i]=arr[i][j];
			  }
		  }
		  System.out.print("a[i]:"+a[i]);			  
	  }   

}
public static int min(int[] arr1){
int arr[][]=new int[5][];
int b=0;
for(int i=0;i<arr.length;i++){
for(int j=1;j<arr[i].length-1;j++){
if(arr[i][j]>b){
b=arr[i][j];
}
}
System.out.println("");
}
return b;
}*/
private static int hasmax(int a[], int n) {
int max = a[0];
for (int i = 1; i < n; i++)
if (max < a[i])
max = a[i];
return max;
}

private static int hasmin(int a[], int n) {
int min = a[0];
for (int i = 1; i < n; i++)
if (min >a[i])
min = a[i];
return min;
}
private static void hasave(int a[], int n){
int aver=a[0],sum=0;
float ave;
for(int i=1;i<n;i++){
sum=sum+a[i];
}
ave=sum/8;
System.out.println("aave="+ave);
}
}
我用for循环创建二位随机数组,然后排序之后,偷了个懒,输出直接跳过第一位和最后一位,然后进行输出
问题一:我一直在捉摸怎么判断长度然后换行
原因:java里可以直接在数组名后加.。
解决方法:我用arr.length或者arr[i].length判断长度换行
问题二:调用函数我用的二维数组
原因:不清楚返回值究竟是个数组还是个数
解决方法:我不知道能不能返回数组,我直接返回一个数在循环里面

(三)代码托管

码云提交历史截图
上传实验项目代码到码云,在码云项目中选择“统计-提交”,设置搜索时间段,搜索本周提交历史,并截图。

原文地址:https://www.cnblogs.com/yeqingsong/p/8548078.html