黑马程序员技术交流社区

标题: 【技术贴】基础--循环嵌套---String [打印本页]

作者: zjm15735187674    时间: 2019-3-29 16:40
标题: 【技术贴】基础--循环嵌套---String
题目一:要求写一个方法:method。该方法要求传入一个数字n(n要小于10),该方法能够计算得到所有各位上的数字不超过n切每一位的数字都不重复的三位数的个数。
并且在测试该方法。
/*
我的思路:(注:此题为枚举类的体型,一般枚举类题目都是要通过for循环来解决)
    (1) 要求传入一个数字n(n要小于10): 需要用到Scanner类,从键盘获取数字,而且对获取的数字需要进行判断,若小于0或者大于9,需给出提示输入有误,且终止程序。
   Scanner sc = new Scanner(System.in);
   sout("请输入n的数值:");
   int n = sc.nextInt();
   if(n<0 || n>9){
     sout("输入有误");
    break;
   }
    (2) 得到三位数:通过3个for循环嵌套来确定各个位置上的数字。最外层for循环得到百位的数字,次外层for循环得到各位上的数字,最内层for循环得到各位上的数字。
     for(int i=0; i<=n; i++){
          int bai = i;
         for(int j=0; j<=n; j++){
                int shi = j;
                for(int k=0; k<=n; k++){
                     int ge = k;
                }
        }
    }
    (3)不重复且互不相同:   从for循环可以看出当i,j,k互不相同时,取到的数字就是不重复切不相同的。
        1>可以先确定百位上的数字,但需要注意0不可作未最高为存在,需做判断 if(i==0)  continue;      
        2>在确定十位数字时,需要和百位上的数字进行比较,相等则跳过本次赋值,重新进行赋值。 if(j == i) continue;
        3>最后确定个位的数字,这时既需要和百位数字进行比较,还需要和十位数字进行比较,存在相同就跳过,重新进行赋值  if(k == i  || k == j)  continue;
    (4)获取个数:需要定义一个计数变量count来确定个数,初始值设为0。当确定个位上的数字时,就已经生成了一个各个位数字互不相同的数字,这时进行count++;
    最后打印输出结果即可。
*/
code:
public class Test3_2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入n的值:");
        int n = sc.nextInt();
        if(n<0 || n>9){
            System.out.println("n输入有误!");
            return;
        }
        method(n);
    }
    public static void method(int n) {
        int count = 0;
        for(int i=0; i<=n; i++){
            if(i == 0){
                continue;
            }
            int num1 = i;
            for(int j=0; j<=n; j++){
                if(i == j){
                    continue;
                }
                int num2 = j;
                for(int k=0; k<=n; k++){
                    if(i==k || k==j){
                        continue;
                    }
                    int num3 = k;
//                    int sum = num1*100 + num2*10 + num3;
//                    System.out.print(sum + " ");
                    count++;
                }
            }
//            System.out.println();
        }
        System.out.println("一共有" + count + "个!");
    }
}

题目2:定义一个方法,传入两个数组,函数中将两个数组不同的元素拼接成一个字符串,并且将该字符串以及字符串的长度输出到控制台上;如果没有则输出"对不起两个数组的所有元素均相同。
/*
涉及到String中的: concat()   ------   equals()  -----   valueOf(int i)  ------length()
思路:(有点繁琐)假设 数组A 数组B, 首选定义一个String str = "";(空的字符串用于存储不同元素)
        先把数组A的每个元素依此和数组B中的所有元素进行比较(两个for循环嵌套,外层数组A循环,内层数组B循环),当发现A中元素和B中所有元素都不同,加入到字符串中。(需要用到String中的concat()方法)注意:数组AB都是整型,需通过String的valueOf(int)将Int型转换成string型。  (    str.concat( String.valueOf( A ) );     )
        再把数组B的每个元素依此和数组A中的所有元素进行比较 ,方法和上述相同。最后返回str。
      main方法中需要对接收到的str进行判断,若为空则输出:对不起两个数组的所有元素均相同


*/

code:
public class Test12_2 {
    public static void main(String[] args) {
        int[] arr1 = {1, 3, 4, 7};
        int[] arr2 = {1, 3, 5, 8};

        String result = method(arr1, arr2);
        if(result.equals("")){
            System.out.println("对不起两个数组的所有元素均相同");
        }else {
            System.out.println("拼接的字符串为:“" + result + "”,长度是:" + result.length());
        }
    }
    public static String method(int[] arr1, int[] arr2){
        String str = "";
        //将arr1中的每个数依次和arr2中的所有数进行比较,若都不同,加入到字符串中
        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr2.length; j++) {
                if(arr1 == arr2[j]){
                    break;
                }
                if(j == arr2.length-1){
                    str = str.concat(String.valueOf(arr1));
                }
            }
        }
        //将arr2中的每个数依次和arr1中的所有数进行比较,若都不同,加入到字符串中
        for (int i = 0; i < arr2.length; i++) {
            for (int j = 0; j < arr1.length; j++) {
                if(arr1 == arr2[j]){
                    break;
                }
                if(j == arr1.length-1){
                    str = str.concat(String.valueOf(arr2));
                }
            }
        }
        return str;
    }
}


作者: zjm15735187674    时间: 2019-3-29 22:54
第二道题method()方法上传有误,重新上传一下
public static String method(int[] arr1, int[] arr2){
//        String str = "";
        StringBuilder sb = new StringBuilder();
        //将arr1中的每个数依次和arr2中的所有数进行比较,若都不同,加入到字符串中
        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr2.length; j++) {
                if(arr1[i] == arr2[j]){
                    break;
                }
                if(j == arr2.length-1){
//                    str = str.concat(String.valueOf(arr1[i]));
//                    str += arr1[i];
                    sb.append(arr1[i]);
                }
            }
        }

        //将arr2中的每个数依次和arr1中的所有数进行比较,若都不同,加入到字符串中
        for (int i = 0; i < arr2.length; i++) {
            for (int j = 0; j < arr1.length; j++) {
                if(arr2[i] == arr1[j]){
                    break;
                }
                if(j == arr1.length-1){
//                    str = str.concat(String.valueOf(arr2[i]));
//                    str += arr2[i];
                    sb.append(arr2[i]);
                }

            }
        }
        String str = sb.toString();
        return str;
    }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2