第二次Java课,这次课学习了编程的思维,在这之前自己阅读完了周爱民先生的《大道至简:软件工程实践者的思想》。我认为现在编程最忌讳的是,拿到题目便开始写。不管是写程序还是写项目,写代码开始前,我认为应该先整体浏览,构建出框架,在纸上画出自己的思维导图。这样能够使自己的代码尽可能地接近完美。在写代码的过程中便是顺序、分支、循环的使用。
这次可完成了一次“框架”的练习。完成一个四则运算随机出题的小程序。
程序按难度分为三部分:1、随机出固定数目的四则运算;2、随机出用户规定数目的四则运算,题目不能重复;3、用户可以规定四则运算范围、选择不同出题方式。
//1、固定数目四则运算 import java.util.Random; public class erzhu{ public static void main(String[] args){ Random r=new Random(); int[] m=new int[100]; int[] n=new int[100];for(int i=0;i<number;i++) { m[i]=r.nextInt(100)+1; n[i]=r.nextInt(100)+1; for(int j=0;j<i;j++) { if(m[i]==m[j]&&n[i]==n[j]) { m[i]=r.nextInt(100)+1; } } int k=(int)(Math.random()*4); switch(k) { case 0:System.out.println(m[i]+"+"+n[i]+"=");break; case 1:System.out.println(m[i]+"-"+n[i]+"=");break; case 2:System.out.println(m[i]+"*"+n[i]+"=");break; case 3:System.out.println(m[i]+"/"+n[i]+"=");break; } } } }
在第一部分我便规定题目不重复,如果直接不定义便会输出多个重复题目。对于重复的判断可以使用集合存储后在比较,也可以使用数组直接用下标来比较,这里我使用的是数组。
//2、规定输出题目数 import java.util.Random; import java.util.Scanner; public class erzhu{ public static void main(String[] args){ Random r=new Random(); int[] m=new int[100]; int[] n=new int[100]; Scanner sc=new Scanner(System.in); System.out.println("请输入题目数:"); int number=sc.nextInt(); for(int i=0;i<number;i++) { m[i]=r.nextInt(100)+1; n[i]=r.nextInt(100)+1; for(int j=0;j<i;j++) { if(m[i]==m[j]&&n[i]==n[j]) { m[i]=r.nextInt(100)+1; } } int k=(int)(Math.random()*4); switch(k) { case 0:System.out.println(m[i]+"+"+n[i]+"=");break; case 1:System.out.println(m[i]+"-"+n[i]+"=");break; case 2:System.out.println(m[i]+"*"+n[i]+"=");break; case 3:System.out.println(m[i]+"/"+n[i]+"=");break; } } } }
对于第二部分,直接使用Scanner;
//3、用户可选择出题方式 import java.util.Random; import java.util.Scanner; public class erzhu { static int num; public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请定义数值范围"); num=sc.nextInt(); System.out.println("请选择:1、加减;2、加减乘除;3、带括号加减;4、带括号加减乘除"); int choice=sc.nextInt(); switch(choice) { case 1:jiajian(); break; case 2:zong();break; case 3:kuohao1();break; case 4:kuohao2();break; } } public static void jiajian() { Random r=new Random(); int[] m=new int[100]; int[] n=new int[100]; Scanner sc=new Scanner(System.in); System.out.println("请输入题目数:"); int number=sc.nextInt(); for(int i=0;i<number;i++) { m[i]=r.nextInt(num)+1; n[i]=r.nextInt(num)+1; for(int j=0;j<i;j++) { if(m[i]==m[j]&&n[i]==n[j]) { m[i]=r.nextInt(100)+1; } } int k=(int)(Math.random()*2); switch(k) { case 0:System.out.println(m[i]+"+"+n[i]+"=");break; case 1:System.out.println(m[i]+"-"+n[i]+"=");break; } } } public static void zong() { Random r=new Random(); int[] m=new int[100]; int[] n=new int[100]; Scanner sc=new Scanner(System.in); System.out.println("请输入题目数:"); int number=sc.nextInt(); for(int i=0;i<number;i++) { m[i]=r.nextInt(num)+1; n[i]=r.nextInt(num)+1; for(int j=0;j<i;j++) { if(m[i]==m[j]&&n[i]==n[j]) { m[i]=r.nextInt(100)+1; } } int k=(int)(Math.random()*4); switch(k) { case 0:System.out.println(m[i]+"+"+n[i]+"=");break; case 1:System.out.println(m[i]+"-"+n[i]+"=");break; case 2:System.out.println(m[i]+"*"+n[i]+"=");break; case 3:System.out.println(m[i]+"/"+n[i]+"=");break; } } } public static void kuohao1() { Random r=new Random(); int[] m=new int[100]; int[] n=new int[100]; int[] a=new int[100]; int[] b=new int[100]; Scanner sc=new Scanner(System.in); System.out.println("请输入题目数:"); int number=sc.nextInt(); for(int i=0;i<number;i++) { m[i]=r.nextInt(num)+1; n[i]=r.nextInt(num)+1; a[i]=r.nextInt(num)+1; b[i]=r.nextInt(num)+1; for(int j=0;j<i;j++) { if((m[i]==m[j]&&n[i]==n[j])||(a[i]==a[j]&&b[i]==b[j])) { m[i]=r.nextInt(num)+1; a[i]=r.nextInt(num)+1; } } int k=(int)(Math.random()*4); switch(k) { case 0:System.out.println("("+m[i]+"+"+n[i]+")"+"+"+a[i]+"+"+b[i]+"=");break; case 1:System.out.println("("+m[i]+"-"+n[i]+")"+"-"+b[i]+"-"+a[i]+"=");break; case 2:System.out.println(m[i]+"+"+"("+n[i]+"+"+a[i]+")"+"+"+b[i]+"=");break; case 3:System.out.println("("+m[i]+"-"+n[i]+")"+"+"+a[i]+"-"+b[i]+"=");break; } } } public static void kuohao2() { Random r=new Random(); int[] m=new int[100]; int[] n=new int[100]; int[] a=new int[100]; int[] b=new int[100]; Scanner sc=new Scanner(System.in); System.out.println("请输入题目数:"); int number=sc.nextInt(); for(int i=0;i<number;i++) { m[i]=r.nextInt(num)+1; n[i]=r.nextInt(num)+1; a[i]=r.nextInt(num)+1; b[i]=r.nextInt(num)+1; for(int j=0;j<i;j++) { if((m[i]==m[j]&&n[i]==n[j])||(a[i]==a[j]&&b[i]==b[j])) { m[i]=r.nextInt(num)+1; a[i]=r.nextInt(num)+1; } } int k=(int)(Math.random()*4); switch(k) { case 0:System.out.println("("+m[i]+"+"+n[i]+")"+"+"+a[i]+"*"+b[i]+"=");break; case 1:System.out.println("("+m[i]+"-"+n[i]+")"+"-"+b[i]+"/"+a[i]+"=");break; case 2:System.out.println(m[i]+"+"+"("+n[i]+"+"+a[i]+")"+"*"+b[i]+"=");break; case 3:System.out.println("("+m[i]+"-"+n[i]+")"+"/"+a[i]+"-"+b[i]+"=");break; } } } }
需要使用循环,多选择语句,方法调用。这一部分用户的自由度相对较大。
这是我使用第三部分的一个截图
这次小程序的编写思维可以应用到各种程序中,首先对其框架进行构思,然后进行编写;对于框架的构思刚开始编程时有必要写仔细,到后面可以粗略一些。