10.8

package com.itheima.arithmeticoperstor;

import java.util.Random;
import java.util.Scanner;

public class test2 {
public static int errCount=0;
public static void main(String[] args) {
int result;
for(int i=1;i<=10;i++) {
result = square(i);
System.out.println(i + "的平方是:" + result);
}
}
public static int square(int a)
{
return a*a;
}
}

public class test2 {
public static int errCount=0;
public static void main(String[] args) {
Random r=new Random();
for(int i=0;i<30;i++)
{
System.out.println(r.nextInt(1000));
}
}
}

方法可以类比函数,形参的数据类型不同,使其调用的函数不同,这是函数的重载
函数重载:参数类型不同,参数个数不同,参数类型的顺序不同

递归
比如:阶乘
public class test2 {
public static int errCount=0;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
System.out.println(jiecheng(n));
}
public static int jiecheng(int n)
{
if(n1||n0)return 1;
else return n*jiecheng(n-1);
}
}

但是 阶乘的数很大
比如20 时会有问题,因为计算机是二进制,int的位数不够用

Java提供了BigInteger类来支持大整数的运算
public class test2 {
public static int errCount=0;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
System.out.println(calculateN2(n));
}
// public static int jiecheng(int n)
// {
// if(n1||n0)return 1;
// else return n*jiecheng(n-1);
// }
public static BigInteger calculateN2(int n)
{
if(n1||n0)return BigInteger.valueOf(1);
else return BigInteger.valueOf(n).multiply(calculateN2(n-1));
}
}

注意BigInteger是一个类,不是基本数据类型,不能用’*’,需要用java给出的multiply()函数
package com.itheima.arithmeticoperstor;

import java.util.Random;
import java.util.Scanner;

public class test2 {
public static int errCount=0;
public static void main(String[] args) {

    Scanner sc=new Scanner(System.in);
    Random r=new Random();
    String[] calculate=new String[35];
    System.out.println("请输入小于30道的题目数量");
    int n=sc.nextInt();

    long startTime = System.currentTimeMillis();
    for(int i=0;i<n;i++)
    {
        int a=r.nextInt(100)+1;
        int b=r.nextInt(100)+1;
        String op="+-*/";
        char c=op.charAt(r.nextInt(op.length()));
        boolean isvalid=isValid(a,b,c,i);
        if(!isvalid){
            i--;
            continue;
        }
        if(isvalid)
        {
            //题目不能重复
            StringBuilder sb = new StringBuilder();
            sb.append(a).append(c).append(b);
            String str = sb.toString();
            boolean flag = false;
            for (int j = 0; j < i; j++) {
                if (calculate[j].equals(str)) {
                    flag = true;
                    break;
                }
            }
            if (!flag) calculate[i] = str;
            //输入答案并记录错题数
            System.out.println(a + "" + c + "" + b + "=");
            System.out.println("请输入答案:");

            int ans = sc.nextInt();
            checkAnswer(a, b, c, ans);
        }
    }
    long endTime = System.currentTimeMillis();
    //是否超出测试时间
    if((endTime-startTime)/1000>60) System.out.println("未在指定时间内完成!");

    System.out.println("错题数:" + errCount);
    System.out.println("正确率:" + (double) (n - errCount) / n * 100 + "%");
}

private static void checkAnswer(int a, int b, char c, int ans) {
    if(c=='+') {
        if(a+b!=ans) errCount++;
    }
    else if(c=='-') {
        if(a-b!=ans) errCount++;
    }
    else if(c=='*') {
        if(a*b!=ans) errCount++;
    }
    else {
        if(a/b!=ans) errCount++;
    }
}
private static boolean isValid(int a,int b,char c,int i)
{
    //不允许结果出现负数
    if(c=='-')
    {
        if(a<b)
        {
            return false;
        }
    }
    //不允许出现相乘4位数
    if (c == '*') {
        if (a * b >= 1000)
        {
            return false;
        }
    }
    //相除必须除尽
    if (c == '/') {
        if(a%b!=0)
        {
           return false;
        }
    }
    return true;
}

}

posted @ 2025-10-08 16:05  苏楗轶  阅读(6)  评论(0)    收藏  举报