Java学习笔记 - 第005天

第004天作业改正: Craps赌博游戏
import java.util.Scanner;

//lang - language java核心包 自动导入

// CoC - Convention over Configuration 约定优于配置
public class CrapsGame {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int money = 1000;
        
        do {
            System.out.println("你的总资产: " + money + "元.");
            int bet;
            do {
                System.out.print("请下注: ");
                bet = input.nextInt();
            } while (bet <= 0 || bet > money);
            // [min, max] - (int) (Math.random() * (max - min + 1)) + min);
            // [min, max) - (int) (Math.random() * (max - min)) + min);
            // (min, max) - (int) (Math.random() * (max - min)) + min + 1);
            // [50, 80] (80 - 50)  50   上限-下限 下限
            int face1 = (int) (Math.random() * 6 + 1);
            int face2 = (int) (Math.random() * 6 + 1);
            int firstPoint = face1 + face2;
            System.out.println("玩家摇出了" + firstPoint + "点.");
            boolean needsGoOn = false;
            switch (firstPoint) {
            case 7:
            case 11:
                money += bet;
                System.out.println("玩家胜!");
                break;
            case 2:
            case 3:
            case 12:
                money -=bet;
                System.out.println("庄家胜!");
                break;
            default:
                needsGoOn = true;
            }
            while (needsGoOn) {
                face1 = (int) (Math.random() * 6 + 1);
                face2 = (int) (Math.random() * 6 + 1);
                int currentPoint = face1 + face2;
                System.out.println("玩家摇出了" + currentPoint + "点.");
                if (currentPoint == 7) {
                    money -= bet;
                    System.out.println("庄家胜!");
                    needsGoOn = false;
                } else if (currentPoint == firstPoint) {
                    money += bet;
                    System.out.println("玩家胜!");
                    needsGoOn = false;
                }
            } 
        } while (money > 0);
        System.out.println("你已经破产!");
        input.close();
    }
}

练习

  • 1.输出如下:
    1 1
    2 4
    3 9
    ... ...
    10 100
        for (int i = 1; i <= 100; i++) {
            //  \t 表示制表符 , 每列左对齐
            System.out.println(i + "\t" + i * i);
            
            // 不够x位 左边补 空格 右对齐
            System.out.printf("%3d %5d\n", i, i * i); 
            
            // 补0
            System.out.printf("%03d %05d\n", i, i * i); 
        }
  • 2.输入一个正整数,判断是不是素数
    提示:检查2~(n - 1)之间有没有n的因子
        Scanner input = new Scanner(System.in);
        System.out.print("请输入一个数: ");
        int n = input.nextInt();
        boolean isPrime = true; // 先假设n是素数
        for (int i = 2; i <= n-1; ++i) {
            if (n % i == 0) {
                isPrime = false;
                break;
            } 
        }
        System.out.println(n + (isPrime ? "是" : "不是") +"素数");
        input.close();
  • 3.把1~100之间的所有素数打印出来
public class Ex03 {

    public static boolean isPrime(int i) {
        for (int j = 2; j <= Math.sqrt(i); j++) {
            if (i % j == 0) {
                return false;
            }
        }
        return true;
    }
    
    public static void main(String[] args) {
        for (int i = 1; i <= 100 ; i++) {
            /*boolean isPrime = true;
            for (int j = 2; j <= Math.sqrt(i); j++) {
                if (i % j == 0) {
                    isPrime = false;
                    break;
                }
            }
            if (isPrime) {
                System.out.println(i);  
            }*/
            if (isPrime(i)) {
                System.out.println(i);      
            }
        }
    }
}
  • 4.打印乘法口诀表
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                //System.out.printf("%d * %d = %2d   ", j, i, i * j);
                System.out.printf("%d*%d=%d\t", j, i, i * j);
                //System.out.print(j + "*" + i + "=" + j * i + "\t");
            }
            System.out.println("");
        }
  • 5.猴子吃桃子
    第一天 吃所有桃子的一半 多吃一个
    第二天 吃剩下桃子的一半 多吃一个
    ...
    第十天 每吃 只有 1 个
    算总共多少桃子
        int total = 1;
        for (int i = 9; i >= 1; i--) {
            total = (total + 1) * 2;
        }
        System.out.println(total);
    }
  • 6.百钱百鸡
    公鸡 5块一只 母鸡 3块一只 小鸡一块买3只
    100块买100只鸡
    公鸡、母鸡、小鸡各有多少只

        // 穷举法  - 穷尽所有的可能性直到找到正确答案
        for (int i = 0; i <= 100 / 5; i++) {
            for (int j = 0; j <= 100 / 3; j++) {
                for (int k = 0; k <= 99; k += 3) {
                    if (5 * i + 3 * j + k / 3 == 100 && i + j + k == 100) {
                        System.out.printf("公鸡有%d只,母鸡有%d只,小鸡有%d只\n",
                                i, j, k);
                    }
                }
            }
        }
        //
        for (int x = 0; x <= 20; x++) {
            for (int y = 0; y <= 33; y++) {
                int z = 100 - x - y;
                if (5 * x + 3 * y + z / 3 == 100 && z % 3 == 0) {
                    System.out.printf("公鸡有%d只,母鸡有%d只,小鸡有%d只\n",
                            x, y, z);
                }
            }
        }
  • 7.完美数
    6 = 1 + 2 + 3
    28 = 1 + 2 + 7 + 14
    找1~10000 之间的完美数
        for (int i = 2; i <= 10000; i++) {
            int sum = 1;
            for (int j = 2; j <= Math.sqrt(i); j++) {
                if (i % j == 0) {
                    sum += j;
                    if (i / j != j) {
                        sum += i / j;
                    }
                }
            }
            if (sum == i) {
                System.out.println(i);  
            }
        }
  • 8.输入年月日,告诉这是这年的第几天
        import java.util.Scanner;

    // 输入年月日,告诉这是这年的第几天
public class Ex10 {

    //如果程序中出现了重复的或相对独立的功能 那么应该将这些功能单独写出一个方法
    public static boolean isLeapYear(int year) {
        return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
    }
    
    public static int daysOfMonth(int year, int month) {
        if (month == 2) {
            if (isLeapYear(year)) {
                return 29;
                }
            else {
                return 28;
            }
        }
        else if (month == 4 || month == 6 || month == 9 || month == 11) {
            return 30;
            }
        else {
            return 31;
        }
    }
    
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入年、月、日: ");
        int year = input.nextInt();
        int month = input.nextInt();
        int day = input.nextInt();
        int days = 0;
        
        for (int i = 1; i < month; i++) {
            /*
            switch (i) {
            case 4: case 6: case 9: case 11:
                days += 30;
                break;
            case 2: 
                if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                    days += 29;
                }
                else {
                    days += 28;
                }
                break;
            default:
                days +=31;
                break;
            }
            */
            days += daysOfMonth(year, i);
        }
        days += day;
        //System.out.println("这天是这一年的第" + days + "天");
        System.out.printf("%d年%d月%d日是这一年的第%d天.", year, month, day, days);
        input.close();
    } }

作业

  • **1.输出如下各种图形:
1.png

    for (int i = 1; i <= 5; i++) {
        for (int j = 1; j <= i; j++) {
            System.out.print("*");
        }
        System.out.println();
    }
    
    for (int i = 1; i <= 5; i++) {
        for (int j = 5; j >= 1; j--) {
            if (j > i) {
                System.out.print(" ");
            }
            else {
                System.out.print("*");
            }
        }
        for (int j = 4; j >= i; j--) {
            System.out.print(" ");
        }
        for (int k = 1; k <= i; k++) {
            System.out.print("*");  
        }
        System.out.println();
    }
    
    
    for (int i = 1; i <= 5; i++) {
        for (int j = 4 - i; j >= 0; j--) {
            System.out.print(" ");
        }
        for (int k = i * 2 - 1; k > 0; k--) {
            System.out.print("*");  
        }
        System.out.println();
    }
  • 2. 5个人去打鱼,打了很多鱼
    a、b、c、d、e
    a 先醒过来,分5份,多了一条,扔掉,拿走自己的一份
    b 然后醒过来,分5份,多了一条,扔掉,拿走自己的一份
    ...
    最少要捕多少鱼

    public class Test01 {

     public static void main(String[] args) {
      int fish = 1;
      boolean flag = true;
      do {
          int fish2 = fish;
          for (int i = 1; i <= 5; i++) {
              if (fish2 % 5 == 1) {
                  fish2 -= myOwn(fish2) + 1;  
              }
              else {
                  break;
              }
              if (i == 5) {
                  flag = false;
              }
          }
          fish += 1;
      } while (flag);
      System.out.println("最少要捕: " + (fish - 1) + "条鱼");
    }
    public static int myOwn(int fish) {
      return (fish - 1) / 5;
    }
    }
    
  • 3.2个日期差多少天

     public class Ex11 {
    
      public static void main(String[] args) {
      Scanner input = new Scanner(System.in);
      System.out.print("请输入第一个日期的年、月、日: ");
      int year1 = input.nextInt();
      int month1 = input.nextInt();
      int day1 = input.nextInt();
      System.out.print("请输入第二个日期的年、月、日: ");
      int year2 = input.nextInt();
      int month2 = input.nextInt();
      int day2 = input.nextInt();
      int total = 0;
      
      if (year1 == year2) {
          total += theSameYearDifferenceBetweenMonth(year1, month1,
                  day1, month2, day2);
      }
      else if (year1 < year2) {
          total += smallYearBigYearOfDays(year1, month1, day1,
                  year2, month2, day2);
      }
      else {
          total += smallYearBigYearOfDays(year2, month2, day2,
                  year1, month1, day1);
      }
      
      System.out.printf("%d年%d月%d日和%d年%d月%d日相差了%d天.", 
              year1, month1, day1, year2, month2, day2 , total);
      input.close();
    }
    
    public static boolean isLeapYear(int year) {
      return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
    }
    
    public static int daysOfMonth(int year, int month) {
      int days;
      switch (month) {
      case 2:
          days=isLeapYear(year) ? 29 : 28;
          break;
      case 4: case 6: case 9: case 11:
          days = 30;
          break;
      default:
          days = 31;
          break;
      }
      return days;
    }
    
    public static int daysOfYear(int year) {
      return isLeapYear(year) ? 366 : 365;
    }
    
    public static int theSameYearDifferenceBetweenMonth(int year, int month1,
          int day1, int month2,int day2 ) {
      int total = 0;
      if (month1 == month2) {
          if (day1 >= day2) {
              total += day1 - day2;
          } else {
              total += day2 - day1;
          }
      }
      else if (month1 < month2) {
          for (int i = month1 + 1; i < month2; i++) {
              total += daysOfMonth(year, i);
          }
          total +=  daysOfMonth(year, month1) - day1 + day2; 
      }
      else {
          for (int i = month2 + 1; i < month1; i++) {
              total += daysOfMonth(year, i);
          }
          total += daysOfMonth(year, month2) - day2 + day1;
      }
      return total;
    }
    
    public static int smallYearBigYearOfDays(int year1, int month1, int day1,
          int year2, int month2, int day2) {
      int total = 0;
      for (int i = year1 + 1; i < year2; i++) {
          total += daysOfYear(i);
      }
      if (month1 < 12) {
          total += theSameYearDifferenceBetweenMonth(year1, month1, day1,
                  12, 31);
      }
      else {
          total += daysOfMonth(year1, month1) - day1;
      }
      if (month2 > 1) {
          total += theSameYearDifferenceBetweenMonth(year2, 1, 1, month2, day2);
      }
      else {
          total += day2;
      }
      return total + 1;
    }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容