黑马程序员技术交流社区

标题: 有一道题,与数组和循环有关的,麻烦大神们帮我看下 [打印本页]

作者: 18868813980    时间: 2016-4-10 08:58
标题: 有一道题,与数组和循环有关的,麻烦大神们帮我看下
题目:自定义一个数组,(这是我自己定义的int[] arr = {12,12,23,34,45,54}),要求每三位进行一次换行打印,打印格式[a,b,c][d,e,f]
/*
[12,12,23]
[34,45,54]
*/


class Demo {
        public static void main(String[] args) {
                int[] arr = {12,12,23,34,45,54};
                print(arr);
        }

        public static void print(int[] arr) {
                for (int x = 0;x < arr.length ;x++ ) {
                        if (x % 3 == 0) {
                                System.out.print("[" );
                        }
                        System.out.print( arr[x] +"," );

                        if ((x+1) % 3  == 0) {
                                System.out.println("]");
                        }
                }
        }
}

但是打印出来的结果是
[12,12,23,]
[34,45,54,]
有哪位大神知道这个怎么改吗?
作者: 改变自己、    时间: 2016-4-10 09:18
   System.out.println("]"); 把这个ln去掉应该可以了, 你试一下
作者: 倚码可待    时间: 2016-4-10 09:20
多判断一次丶的位置,,别和System.out.print( arr[x] +"," );放一块打印,单独打印,然后判断到第三个数时候就不打印了就可以
作者: yanzhendong    时间: 2016-4-10 09:59
本帖最后由 yanzhendong 于 2016-4-10 10:00 编辑
  1. public static void print(int[] array) {

  2.         int pos = 0;//遍历指针
  3.         System.out.print("[");// 打印数组开始符符号
  4.         while (pos < array.length) {
  5.             System.out.print(array[pos++]);//打印数组元素
  6.             
  7.             if (pos == array.length) {// 数组打印完毕,跳出循环
  8.                 break;
  9.             }
  10.             
  11.             
  12.             if (pos % 3 == 0) {
  13.                 System.out.print("]\r\n[");// 打印每个子数组分隔符
  14.                 continue;
  15.             }
  16.             System.out.print(",");// 打印每个数组元素分隔符
  17.             
  18.         }
  19.         System.out.print("]");// 打印数组结束符
  20.     }<span style="display: none; width: 0px; height: 0px;" id="transmark"></span>
复制代码

作者: decelpl    时间: 2016-4-10 10:41
这个好像 是不难
作者: 18868813980    时间: 2016-4-10 11:30
yanzhendong 发表于 2016-4-10 09:59

谢谢你啦,我看懂了
作者: Bloodsoul    时间: 2016-4-10 11:47
本帖最后由 Bloodsoul 于 2016-4-10 11:55 编辑

        public static void print(int[] arr) {
                System.out.print("[");
                for (int i = 0 ; i < arr.length ; i++ ) {
                        if (i != 0 && i % 3 == 0) {
                                System.out.print("]" + "\r" + "\n" + "[");
                        }
                        
                        System.out.print(arr);
                        
if (i == arr.length - 1) {
                                System.out.println("]");
                                break;
                        }

                        if ((i + 1) % 3 != 0) {
                                System.out.print(",");                                       
                        }      
                }            
        }

这是我刚敲的,已经验证过了,你可以参考一下

作者: Bloodsoul    时间: 2016-4-10 11:59
yanzhendong 发表于 2016-4-10 09:59

请问下,你的这个带标号的格式,是怎么复制出来的啊
作者: yanzhendong    时间: 2016-4-10 15:06
Bloodsoul 发表于 2016-4-10 11:59
请问下,你的这个带标号的格式,是怎么复制出来的啊



作者: Bloodsoul    时间: 2016-4-11 23:14
yanzhendong 发表于 2016-4-10 15:06

哦,是这样啊,谢了
随便请教一道题
给定一个数组,里面是一些数字,请只用一个for循环,找出其中第二大的数字
(要求: 只用一个for循环,配合if/else判断,不要对数组排序,例如,对于数组[4,2,8,6,1,9,3,2],输出8)
作者: wskheima    时间: 2016-4-11 23:42
哈哈哈哈哈!!!!!不错啊
作者: 18868813980    时间: 2016-4-11 23:54
Bloodsoul 发表于 2016-4-11 23:14
哦,是这样啊,谢了
随便请教一道题
给定一个数组,里面是一些数字,请只用一个for循环,找出其中第 ...

答案出来了也给我看下吧,小白一个,还望大神指教啊
作者: 系米粒    时间: 2016-4-12 00:02
这个好像 是不难
作者: z332406259    时间: 2016-4-12 00:28
Bloodsoul 发表于 2016-4-11 23:14
哦,是这样啊,谢了
随便请教一道题
给定一个数组,里面是一些数字,请只用一个for循环,找出其中第 ...

package com.heima.lzm33;

/**
*
* 第一题:给定一个数组,里面是一些数字,请只用一个for循环,找出其中第二大的数字。
* 所谓第二大的数字是:相当于这个数组逆序排序后,取下标为1的那个数字。
* 要求:只用1个for循环,配合if/else判断。不要对数组排序。
*  例如:对于数组 [2, 5, 1, 3, 2], 输出:3
*
*/
public class Test_1 {
        public static void main(String[] args) {
                int[] arr = { 6,6,5,4,3 };         // 定义数组
                int first = arr[0];                                                                                         // 将数组第一个数字标记为NO1大的数字
                int second = arr[1];                                                                                 // 将数组第二个数字标记为NO2大的数字
                if (first < second) {                                                                                 // 如果NO1大的数字>NO2的数字,就交换它们的位置
                        int temp = first;
                        first = second;
                        second = temp;
                }
                for (int i = 2; i < arr.length - 1; i++) {                         // 对数组遍历从第三个开始
                        if (first == second) {                                                                         // 如果NO1数字和NO2数字相等,就判断数组遍历的数字和NO1的大小.
                                if (first < arr) {                                                                        // 遍历的数字若比NO1大,则把遍历的数字赋值给NO1,否则赋值给NO2.
                                        first = arr;
                                } else {
                                        second = arr;
                                }
                        } else {                                                                                                                 // 如果NO1和NO2不相等,则比较遍历的数字和NO1的大小.
                                if (first < arr) {                                                                         // 若该数字比NO1大,就将NO1赋值给NO2,该数字赋值给NO1.
                                        second = first;
                                        first = arr;
                                } else if (first > arr) {                                                         // 若该数字比NO1小,就比较该数字和NO2的大小.
                                        if (second < arr) {                                                         // 若该数字比NO2大,就将该数字赋值给NO2.
                                                second = arr;
                                        }
                                }
                        }
                }
                System.out.println(second);                                                         // 输出NO2
        }
}

作者: Bloodsoul    时间: 2016-4-12 22:52
z332406259 发表于 2016-4-12 00:28
package com.heima.lzm33;

/**



把这2处修改一下,会好点吧

作者: 18868813980    时间: 2016-4-12 23:52
Bloodsoul 发表于 2016-4-12 22:52
把这2处修改一下,会好点吧

你们学了多长时间了啊?

作者: z332406259    时间: 2016-4-13 00:55
Bloodsoul 发表于 2016-4-12 22:52
把这2处修改一下,会好点吧

第一处,手误了,<=的=被我删了.还有代码中的arr[  i ]我往回复中一放[   i]就没了
第二处没必要加>=了,因为如果加等于了,当first和arr相等的时候,arr的值就会赋给second,那么最大的数字和第二大的数字就相等了,若此时循环正好是最后一次,则输出的数字变成了最大的数字.而不是第二大的数字了.

作者: NB的笨小孩    时间: 2016-4-13 06:58
好好看了下评论,跟着学习一下
作者: Yoyoqiu    时间: 2016-4-13 09:54
//自定义一个数组 每三个循环打印
class Test_003 {
        public static void main(String[] args) {
                int [] arr1 = {11,33,66,47,55,98,32,46,16,58,34};
                loop(arr1);
        }
        public static void loop(int [] arr){
                for (int i = 0;i<arr.length;i++ ) {  //数组遍历
                        if (i!=0&&i%3==0) {   // 排除第一个数 然后找到换行的数
                                System.out.print("]"+"\n"+"["+arr[i]+",");
                        //换行前 先输出上一行]后换行再输出下一行[ 打印元素 打印,
                        }else {
                                if (i==0) { //打印第一个数 前面加[ 后面加,
                                        System.out.print("["+arr[i]+",");
                                } else if (i==arr.length-1) {//打印最后一个数 后面加]
                                    System.out.println(arr[i]+"]");
                                  }else{
                                          if ((i+1)%3==0){ //判断每一行最后一个元素 不输出,
                                                System.out.print(arr[i]);
                                          }else{ //其他元素输出后每个加,
                                                System.out.print(arr[i]+",");
                                                }
                                   }
                         }
                }
        }
}
我学的少 只会用if
作者: Bloodsoul    时间: 2016-4-13 23:42
18868813980 发表于 2016-4-12 23:52
你们学了多长时间了啊?

刚学几天,会一点皮毛




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