美文网首页Java编程入门之路
JAVA入门 常见问题总结:第二章 知识点(2)流程控制

JAVA入门 常见问题总结:第二章 知识点(2)流程控制

作者: Mr_WangZz | 来源:发表于2019-02-22 17:08 被阅读0次

    分支结构:

    1. 写出结果:

      class Demo{
          public static void main(String[] args){
              int m=0,n=3;
              if(m>0)
              if(n>2)
              System.out.println("A");    
              else
              System.out.println("B");        
          }
      }
      //answer:没有结果
      
    2. 实现对三个整数进行排序,输出时按照从小到大的顺序输出。

    3. 从键盘分别输入年、月、日,判断这一天是当年的第几天

      public class Test {
          public static void main(String[] args) {
              Scanner scanner = new Scanner(System.in);
              System.out.println("输入year:");
              int year = scanner.nextInt();
              System.out.println("输入month:");
              int month = scanner.nextInt();
              System.out.println("输入day:");
              int day = scanner.nextInt();
              int sumDay = 0;
              switch (month) {
              case 12:
              sumDay += 30;
              case 11:
              sumDay += 31;
              case 10:
              sumDay += 30;
              case 9:
                  sumDay += 31;
              case 8:
                  sumDay += 31;
              case 7:
                  sumDay += 30;
              case 6:
                  sumDay += 31;
              case 5:
                  sumDay += 30;
              case 4:
                  sumDay += 31;
              case 3:
                  if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
                      sumDay += 29;
                  else
                      sumDay += 28;
              case 2:
                  sumDay += 31;
              case 1:
                  sumDay += day;
              }
              System.out.println(year + "年" + month + "月" + day + "日是今年的第" + sumDay + "天");
          }
      }
      
    4. switch是否能作用在byte上,是否能作用在long上,是否能作用在String上
      答:switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是
      int、 short、 char 或者 byte。long不能作用于swtich.JDK1.7新加入了String类型。

    5. 编写程序,判断给定的某个年份是否是闰年
      闰年的判断规则如下:
      (1)若某个年份能被4整除但不能被100整除,则是闰年。
      (2)若某个年份能被400整除,则也是闰年。

       if((year % 4 ==0 && year % 100 != 0) || year % 400 == 0){}
      
    6. 要求用户输入两个数a和b,如果a能被b整除或者a加b大于1000,则输出a;否则输出b。

    7. 编写程序,从键盘接收整数参数.如果该数为1-7,打印对应的星期值,否则打印“非法参数”。

    8. 使用条件结构实现,如果用户名等于字符‘青’,密码等于数字‘123’,就输出“欢迎你,青”,否则就输出“对不起,你不是青”。
      提示:先声明两个变量,一个是char型的,用来存放用户名,一个是int型的,用来存放密码。

    9. ⭐️求ax2+bx+c=0方程的根。
      a,b,c分别为函数的参数,
      如果:b2-4ac>0,则有两个解;b2-4ac=0,则有一个解;b2-4ac<0,则无解;
      已知:x1=(-b+sqrt(b2-4ac))/2a
      X2=(-b-sqrt(b2-4ac))/2a

      System.out.println("求 ax^2 + bx + c = 0的解");
      
      Scanner scan = new Scanner(System.in);
      while (true) {
      
          int a, b, c;
          a = b = c = 0;
          //或 int a=0, b=0, c=0;
      
          System.out.println("请输入a的值");
          if (scan.hasNextInt()) {
              a = scan.nextInt();
              if (a == 0) {
                  System.out.println("此方程不是2元1次方程,解方程结束");
                  return;
              }
          }
          System.out.println("请输入b的值");
          if (scan.hasNextInt()) {
              b = scan.nextInt();
          }
          System.out.println("请输入c的值");
          if (scan.hasNextInt()) {
              c = scan.nextInt();
          }
      
          System.out.println("a=" + a + ", b=" + b + ", c=" + c);
      
          double result = b*b - 4 * a * c;
          System.out.println(result);
          if (result < 0) {
              System.out.println("此方程无解");
      
          }else {
              System.out.println(Math.sqrt(result));
              double x1 = (-b + Math.sqrt(result))/(2*a);
              System.out.println("x1 = " + x1);
              if (result > 0) {
                  double x2 = (-b - Math.sqrt(result))/(2*a);
                  System.out.println("x2 = " + x2);
                  System.out.println("此方程有2个解");
                  return;
              }
              System.out.println("此方程只有一个解");
          }
      }
      
    10. 生成13位条形码

    ```
    Ean-13码规则:第十三位数字是前十二位数字经过计算得到的校验码。
    例如:690123456789
    计算其校验码的过程为:
    @前十二位的奇数位和6+0+2+4+6+8=26
    @前十二位的偶数位和9+1+3+5+7+9=34
    @将奇数和与偶数和的三倍相加26+34*3=128
    @取结果的个位数:128的个位数为8
    @用10减去这个个位数10-8=2
    所以校验码为2
    (注:如果取结果的个位数为0,那么校验码不是为10(10-0=10),而是0)
    实现方法ean13()计算验证码,输入12位条码,返回带验证码的条码。
        例:输入:692223361219输出:6922233612192
    ```
    ```
    //实现代码
    static void test1 () {
    
        Scanner scan = new Scanner(System.in);
        String numberString;
    
        while (true) {
            System.out.println("输入12位条码");
            if (scan.hasNext()) {
                numberString = scan.next();
    
                //if (number >= 10000000000L && number <= 99999999999L) {//为了让编译器直接识别较长的long型,需要直接使用"L"标明。
                if (numberString.length() == 12) {
                    System.out.println(numberString);
                    break;//退出循环
                }else {
                    System.out.println("输入位数错误");
                }
            }
        }
    
        int sum1 = 0;//奇数位的和
        int sum2 = 0;//偶数位的和
    
        for (int i = 0; i < 12; i++) {
            char letter = numberString.charAt(i);
    
            int iNumber = (int)letter - (int)'0';
    
            if (i%2 == 0) {
                //奇数位
                sum1 += iNumber;
            }else {
                //偶数位
                sum2 += iNumber;
            }
        }
    
        int checkCode = 10 - (sum1 + sum2 * 3) % 10;
    
        System.out.println("奇数位的和:" + sum1 + "\n偶数位的和:" + sum2 + "\n得到的校验码:" + checkCode);
        //其实应该分个字符串放进数组便利
    
        /*
        * 输入12位条码
        * 690123456789
        690123456789
        奇数位的和:26
        偶数位的和:34
        得到的校验码:2
    
        输入12位条码
        692223361219
        692223361219
        奇数位的和:15
        偶数位的和:31
        得到的校验码:2
        * */
    ```
    
    1. 循环结构:

      //What is the result when you compile and run the following code? 
      public class Test{
          public void method(){
              for(int i = 0; i < 3; i++) {
                 System.out.print(i);
             }
             System.out.print(i);
          }
      }
      

      A. 0122 B. 0123 C. compile error D. none of these

      答案:C

    2. 打印1-100之间13的倍数,使用for循环

      static void test2() {
      
          for (int i = 1; i < 101; i++) {
              if (i % 13 == 0) {
                  System.out.println(i);
              }
          }
          //共需执行100 * 100 = 10000次
      
          for (int i = 1; i <= 101 / 13; i++) {
              System.out.println(13 * i);
          }
          //只需执行101/13次,远远小于第一种
      
          //13//26//39//52//65//78//91
      }
      
    3. 使用双重循环打印20 * 8的矩形,使用for循环实现

      static void test3() {
      
          for (int i = 0; i < 8; i++) {
              String string = "";
              for (int j = 0; j < 20; j++) {
                  string = string + "*";
      
              }
              System.out.println(string);//默认换行
          }
      
      }
      
    4. 用for循环计算1000以内奇数的和

    5. 1)输入长和宽,输出长方形,如:输入4和3, 将输出如下图形

    2)输入高度,输出直角三角形。如:输入4, 将输出如下图形

    3)输入高度,输出倒直角三角形。如:输入4, 将输出如下图形

    1. 打印九九乘法表

    2. 3000米长的绳子,每天减一半。问多少天这个绳子会小于5米?不考虑小数。

      public static void main(String[] args) {
          int day = 0;
          for (int x = 3000; x >= 5; x /= 2) {
              day++;
          }
          System.out.println("day=" + day);
          /*
           * 方法二: 
           * day = 0; 
           * for(int x=3000; x>=5; day++) { 
           *      x = x/2; 
           * }
           * System.out.println(day);
           */
      }
      
    3. 打印1-100之间13的倍数,使用continue语句

    4. 混合结构练习
      写出结果

      public class Demo{ 
          public static void main(String []args){ 
              int i = 0, j = 5; 
              tp: for (;;){ 
                  i++; 
                  for(;;){
                      if(i > j--)
                      break tp; 
                  }
              } 
              System.out.println("i = " + i + ", j = "+ j);   //i=1,j=-1;
          } 
      }
      
    5. 输出从1到100之间所有不能被3整除的数;并输出这些整数的和

    6. 输入两个正整数m和n,求其最大公约数和最小公倍数

      int m = 12, n = 28;
      //获取m和n的较大值
      int max = (m > n)? m : n;
      //获取m和n的较小值
      int min = (m < n)? m : n;
      
      //求m和n的最大公约数
      for(int i = min;i >= 1;i--){
          if( m % i == 0 && n % i == 0){
              System.out.println("m和n的最大公约数是:" + i);
              break;
          }
      }
      //求m和n的最小公倍数
      for(int i = max;i <= m * n;i++){
          if( i % m == 0 && i % n == 0){
              System.out.println("m和n的最小公倍数是:" + i);
              break;
          }
      }
      
    1. 根据指定月份,打印该月份所属的季节
      分别使用if-else if-else语句和switch-case语句:
      3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季

      [answer]
      if(x==3 || x==4 || x==5)
          System.out.println(x+"春季");
      else if(x==6 || x==7 || x==8)
          System.out.println(x+"夏季");
      else if(x==9 || x==10 || x==11)
          System.out.println(x+"秋季");
      else if(x==12 || x==1 || x==2)
          System.out.println(x+"冬季");
      else
          System.out.println(x+"月份不存在");
      
      [第二种]
      if(x>12 || x<1)
          System.out.println(x+"月份不存在");
      else if(x>=3 && x<=5)
          System.out.println(x+"春季");
      else if(x>=6 && x<=8)
          System.out.println(x+"夏季");
      else if(x>=9 && x<=11)
          System.out.println(x+"秋季");
      else
          System.out.println(x+"冬季"); 
      
      [第3种]
      public static void main(String[] args) {
          int x = 4;
          switch(x){
              case 3:
              case 4:
              case 5:
                  System.out.println(x+"春季");
                  break;
              case 6:
              case 7:
              case 8:
                  System.out.println(x+"夏季");
                  break;
              case 9:
              case 10:
              case 11:
                  System.out.println(x+"秋季");
                  break;
              case 12:
              case 1:
              case 2:
                  System.out.println(x+"冬季");
                  break;
              default:
                  System.out.println("nono");
          }
      }
      
    2. 已知学生成绩以100分为满分,共分5个等级:A,B,C,D,E。90~100为等级A,80~89为等级B,70~79为等级C,60~69为等级D,0~59为等级E。

      要求定义一个成绩变量,当成绩变化时,可直接知道该成绩对应的等级。
      例如:当成绩为100时,该学生的等级时A。
      class LevelDemo{
          //定义一功能,通过给定分数,获取该分数对应的等级。
          public static void main(String[] args){
              int num = 89;
              if(num>=90 && num<=100)
                  System.out.println("level = A");
              else if(num>=80 && num<=89)
                  System.out.println("level = B");
              else if(num>=70 && num<=79)
                  System.out.println("level = C");
              else if(num>=60 && num<=69)
                  System.out.println("level = D");
              else
                  System.out.println("level = E");
          }
      }
      
    3. 1)打印1~100之间 6的倍数的个数;
      2)求出1~100之间,既是3又是7的倍数的自然数出现的次数?

      public static void main(String[] args) {
              int count1 = 0,count2 = 0;
              for (int x = 1; x <= 100; x++) {
                  if (x % 6 == 0){
                      count1++;
                  }
                  if(x % 3 == 0 && x % 7 == 0){
                      count2++;
                  }
              }
              System.out.println("count1=" + count1);
              System.out.println("count2=" + count2);
      }
      
    4. 求调和级数中从第多少项开始和的值大于10
      调和级数的第n项形式为:1+1/2+1/3+…+1/n

      public static void main(String[] args) {
          double sum = 0.0;
          int i = 1;
          while (true) {
              sum += 1.0 / i;
              if (sum > 10) {
                  break;
              }
              i++;
          }
          System.out.println(i);
      }
      
    5. 打印如下的图形

         *
         * * *
         * * * * *
         * * * * * * *
         * * * * *
         * * *
         *
      for (int i = 0; i < 7; i++) {
          if (i < 4) {
              for (int j = 0; j < 2 * i + 1; j++) {
                  System.out.print("* ");
              }
              System.out.println();
          } else {
              for (int k = 0; k < 13 - 2 * i; k++) {
                  System.out.print("* ");
              }
              System.out.println();
          }
      }
      
    6. 【拓展】打印如下的图形

          * 
         * * 
        * * * 
       * * * * 
      * * * * * 
       * * * * 
        * * * 
         * * 
          * 
      // 上半部分
      for (int i = 0; i < 5; i++) {
          // 输出“-”
          for (int j = 0; j < 4 - i; j++) {
              System.out.print(" ");
          }
      
          // 输出“* ”
          for (int k = 0; k < i + 1; k++) {
              System.out.print("* ");
          }
          System.out.println();
      }
      // 下半部分
      for (int i = 0; i < 4; i++) {
          for (int j = 0; j < i + 1; j++) {
              System.out.print(" ");
          }
          for (int k = 0; k < 4 - i; k++) {
              System.out.print("* ");
          }
          System.out.println();
      
      }
      
      //解法2
      static void test6() {
      
          Scanner scan = new Scanner(System.in);
      
          System.out.println("请输入菱形的规模,仅限与奇数");
      
          int startsCount = 0;
          if (scan.hasNextInt()) {
              startsCount = scan.nextInt();
          }
      
          if (startsCount % 2 == 0) {
              System.out.println("非奇数");
              return;
          }
      
          //打印目标
          int a = startsCount / 2 + 1;
      
          for (int i = 0; i < startsCount; i++) {
              String currentString = "";
              if (i < a) {//上部
                  for (int j = 0; j < startsCount / 2 - i; j++) {
                      currentString += " ";
                  }
                  for (int j = 0; j <= i; j++) {
                      currentString += "* ";
                  }
              } else {//下部
                  /*
                  * 中间星星的总数 = 总数/2 +1;
                  * 空格数 = 中间星星数 - (行数相对于中间的相对值);
                  * */
                  for (int j = 0; j < i-a+1; j++) {
                      currentString += " ";
                  }
                  for (int j = a - (i-a+1); j > 0; j--) {
                      currentString += "* ";
                  }
              }
              System.out.println(currentString);
          }
      
      }
      
    7. 拓展:打印如下的图形

      **********         
      ****  ****         
      ***    ***         
      **      **         
      *        *        
      **      **
      ***    ***
      ****  ****
      **********
      
      //code 
      static void test7() {
      
          int rows = 9;
      
          for (int i = 0; i < rows; i++) {
              String starsString = "";
              if (i <= rows/2) {
                  //上部
                  //分左右
                  for (int j = 0; j < rows+1; j++) {
                      //总数 rows+1
                      //星星数 2*i
                      if (j >= (rows+1)/2-i && j< (rows+1)/2+i) {
                          starsString += " ";
                      }else {
                          starsString += "*";
                      }
                  }
              } else {
                  //下部
                  for (int j = 0; j < rows+1; j++) {
                      if (j >= (i-rows/2)+1 &&  j < (rows+1)-((i-rows/2)+1)) {
                          starsString += " ";
                      } else {
                          starsString += "*";
                      }
                  }
              }
              System.out.println(starsString);
          }
      
      }
      
    8. 编写程序,打印100-200之间的质数

      for (int i = 100; i <= 200; i++) {
          int count = 0;//记录当前i的因数个数
          for (int j = 1; j <= i; j++) {
              if (i % j == 0) {
                  count ++;
                  if (count > 2) {
                      continue;
                  }
              }
          }
          if (count == 2) {
              System.out.println("素数" + i);
          }
      }
      
    9. 一个数如果恰好等于它的因子之和,这个数就称为"完数"
      (因子:除去这个数本身正的约数)
      例如6=1+2+3.编程 找出1000以内的所有完数

      public class WanShu {
          //方法2 自写
          for (int i = 1; i <= 1000; i++) {
              int sum = 0;
              for (int j = 1; j < i; j++) {
                  if (i % j == 0) {
                      sum += j;
                  }
              }
              if (sum == i) {
                  System.out.println(i);
              }
          }
          //方法1 Demo
          static int count;
          public static void main(String[] args) {
              for (int i = 1; i <= 1000; i++) {
                  int factor = 0;
                  for (int j = 1; j < i; j++) {
                      if (i % j == 0)
                          factor += j;
                  }
                  if (factor == i) {
                      System.out.println(i);
                      count++;
                  }
              }
              System.out.println("1-1000之间的完数个数为:" + count);
          }
      }
      
    1. ⭐️(数组暂时没学)写一个程序,找出4位数的所有吸血鬼的数字
      例如:1260=21*60
      1827=21*87

      public class Test1 {
          public static void main(String[] args) {
              for (int num = 1001; num < 10000; num++) {
                  math(num);
              }
          }
      
          public static void math(int num) {
              int[] temp1 = new int[2];
              int[] temp2 = new int[2];
      
              int a = num / 1000;
              int b = num / 100 % 10;
              int c = num / 10 % 10;
              int d = num % 10;
              int[] data = { a, b, c, d };
              for (int i = 0; i < data.length; i++) {
                  for (int j = 0; j < data.length; j++) {
                      if (i == j) {
                          continue;
                      }
                      temp1[0] = data[i];
                      temp1[1] = data[j];
                      for (int m = 0; m < data.length; m++) {
                          if (m != i && m != j) {
                              temp2[0] = data[m];
                              for (int n = 0; n < data.length; n++) {
                                  if (n != i && n != j && n != m) {
                                      temp2[1] = data[n];
                                      multi(data, temp1, temp2);
                                  }
                              }
                          }
                      }
                  }
              }
          }
      
          public static int toInt(int[] temp) {
              int m = 0;
              int[] temp1 = new int[temp.length];
              for (int i = 0; i < temp.length; i++) {
                  temp1[i] = temp[i] * (int) Math.pow(10, temp.length - 1 - i);
              }
              for (int i = 0; i < temp1.length; i++) {
                  m += temp1[i];
              }
              return m;
          }
      
          public static void multi(int[] temp, int[] temp1, int[] temp2) {
              int i = toInt(temp1);
              int j = toInt(temp2);
              int k = toInt(temp);
              if (k == i * j) {
                  System.out.println(k + "=" + i + "*" + j);
              }
          }
      }
      
    2. 输出所有的水仙花数。所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身。

      例如: 153 = 1*1*1 + 3*3*3 + 5*5*5 
      class ShuiXianHua {
          public static void main(String[] args) {
              for (int i = 100; i < 1000; i++) {// 实现所有的三位数的一个遍历
                  int j1 = 0;
                  int j2 = 0;
                  int j3 = 0;
                  j1 = i / 100;// 百位
                  j2 = (i - 100 * j1) / 10;// 十位
                  j3 = i - 100 * j1 - 10 * j2;// 个位
      
                  if (i == j1 * j1 * j1 + j2 * j2 * j2 + j3 * j3 * j3) {
                      System.out.println("此数值为满足条件的水仙花数:" + i);
                  }
              }
          }
      }
      
    3. 山上有一口缸可以装50升水,现在有15升水。老和尚叫小和尚下山挑水,每次可以挑5升。问:小和尚要挑几次水才可以把水缸挑满?通过编程解决这个问题。
      提示:
      (1) 用整型变量water表示水缸里的水“int water = 15;”。
      (2) 用整型变量l表示小和尚下山挑水的次数“int l = 0;”。
      (3) 分析循环条件(水少于50升),循环操作(水增加5升,挑水次数增加1)。
      (4) 套用while循环(或do-while循环)写出代码。

    4. 实现判断一个4位整数,统计出此整数里面包含多少个偶数,多少个奇数的功能

    5. 开发一款软件,根据公式(身高-108)*2=体重,可以有10斤左右的浮动。来观察测试者体重是否合适。

    6. 有3个整数,给出提示信息:
      能否创建三角形;两边之和大于第三边 三个条件都要写
      如果能构建三角形,提示是直角三角形还是等边三角形等腰三角形还是普通三角形;
      最后输出三角形面积;

    7. 在JAVA中,如何跳出当前的多重嵌套循环?
      答:用break; return 方法。

    相关文章

      网友评论

        本文标题:JAVA入门 常见问题总结:第二章 知识点(2)流程控制

        本文链接:https://www.haomeiwen.com/subject/wvneyqtx.html