A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


17 个回复

正序浏览
本帖最后由 L10052108 于 2016-11-12 20:27 编辑

照着我的程序去写吧!
你在循环体内的语句和我的不一样。仔细找找看吧
[AppleScript] 纯文本查看 复制代码
//X不变,Y减小
                    for(int i = n-circle-1;i>circle;i--){  //
                            arr[n-circle-1] = num++;
                    }
                    
                    //X减小,Y不变
                    for(int i= n-circle-1;i>circle;i--){
                            arr[circle] = num++;
                    }

arr 是二维数组,而你却当成一维数组
arr[n-circle-1] = num++;
arr[circle] = num++;
编译都无法通过,不知道你是如何调试的

[AppleScript] 纯文本查看 复制代码
  for(int i=0;i<n-circle*2-1;i++){
                                        arr[circle][i+circle] = num++; //num =6 ;
                                }



circle*2-1;表示的是长度,而不是这行的最大的那个数值。(mspaint 画的草图)


回复 使用道具 举报
L10052108 发表于 2016-11-10 09:53
我试过3,4,5甚至15没有问题,举个出现问题例子,我好调试

你试的是我的嘛?我不的很多不可以啊 3 ,5,7都不行
回复 使用道具 举报
小牛想成为大牛 发表于 2016-11-9 23:34
你这个没问题,我照着你的思想做了一下但是我的有BUG,有的打印可以有的不可以、、、
import java.util.S ...

我试过3,4,5甚至15没有问题,举个出现问题例子,我好调试
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
L10052108 发表于 2016-11-8 21:15
首先说说这道题吧,是我做过一道面试题。不是很难,关键是有点儿绕,说说我的解题步骤:
[mw_shl_code=appl ...

你这个没问题,我照着你的思想做了一下但是我的有BUG,有的打印可以有的不可以、、、
import java.util.Scanner;

class Test {
                public static void main(String[] args) {
                        Scanner sc=new Scanner(System.in);
                        int n =sc.nextInt();
                        int[][] arr=new int[n][n];
                        int circle=0;
                        int num=1;//要输入的额数
                        while(num<=n*n){
                                //X不变,Y增加
                                for(int i=0;i<n-circle*2-1;i++){
                                        arr[circle][i+circle] = num++; //num =6 ;
                                }
                               
                                //X增加,Y不变
                                for(int i=0;i< n - circle*2-1;i++){
                                        arr[i+circle][n-circle-1]=num++;    //num=9
                                }
                               
                                //X不变,Y减小
                                for(int i = n-circle-1;i>circle;i--){  //
                                        arr[n-circle-1] = num++;
                                }
                               
                                //X减小,Y不变
                                for(int i= n-circle-1;i>circle;i--){
                                        arr[circle] = num++;
                                }
                                System.out.println(num);
                                circle++;
                        }
                        for(int i=0;i<n;i++){
                                for(int j=0;j<n;j++){
                                        System.out.print(arr[j]+"\t");
                                }
                                System.out.println();
                        }
                }
        }

回复 使用道具 举报
没有,不过你可以网上搜搜打印螺旋矩阵
回复 使用道具 举报
hxs 初级黑马 2016-11-8 22:11:36
13#
楼主做出来了吗?
回复 使用道具 举报
首先说说这道题吧,是我做过一道面试题。不是很难,关键是有点儿绕,说说我的解题步骤:
[AppleScript] 纯文本查看 复制代码
package com.itheima;

import java.util.Scanner;

/**
 * 目的:写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列
 * 
 * @version V1.0
 * @author liuwei
 * 
 */
/*
 * 分析:创建一个二维数组arr[x][y] 先分析最外圈的数据组成特点,分成四个过程 :1,x 不变 y 增加 2,y值不变 x 增加 3,x值不变
 * y值减少 4,y值不变 x值减小 结束条件是,赋值的数字增加了 n * n 的时候
 */
public class Test7 {
	public static void main(String[] args) {
		System.out.println("请输入方阵的大小:");

		Scanner sc = new Scanner(System.in);

		int n = sc.nextInt();

		// 创建一个二维数组
		int arr[][] = new int[n][n];

		// 表示while 循环次数
		int count = 0;

		// 表示需要赋值的大小
		int num = 1;

		// 给二维数组赋值
		while (num <= n * n) {
			int i;
			// x 不变 y 增加
			for (i = count; i <= (n - count - 1); i++) {
				arr[count][i] = num++;
			}

			// y值不变 x 增加
			for (i = (count + 1); i <= (n - count - 1); i++) {
				arr[i][n - count - 1] = num++;
			}

			// x 不变 y 减少
			for (i = (n - count - 1 - 1); i >= count; i--) {
				arr[(n - count - 1)][i] = num++;
			}

			// y值不变 x值减小
			for (i = (n - count - 1 - 1); i >= (count + 1); i--) {
				arr[i][count] = num++;
			}

			// 四次赋值结束后,进行自增
			count++;
		}

		// 控制台输出二维数组
		for (int x = 0; x < n; x++) {
			for (int y = 0; y < n; y++) {
				System.out.print(arr[x][y] + "\t");
			}
			// 每一次输出一行进行一 换行
			System.out.println();
		}

	}
}

使用步骤:键盘录入一个数字,可以生成任意一个,这种数字图。
回复 使用道具 举报
这题好难啊,什么鬼,用循环?
回复 使用道具 举报
IceLoveInFire丶 发表于 2016-11-7 13:24
我能说没明白啥意思么是按这个格式打印吗

是的啊~~~~~~~~~~
回复 使用道具 举报
默默默默 发表于 2016-11-7 07:21
不连续,简单两层for循环不行吧,里面得嵌套判断

你试出来了没。。。
回复 使用道具 举报
若白衣卿相 发表于 2016-11-7 01:49
最外层四条边,每条边平均3个元素,光这就两层循环了。还要进入内层,这就是要三层了吧。我是这个思路,做 ...

你单针对这个可以想,但是如何输入指定层数打定指定图形了呢。。。
回复 使用道具 举报
poi1234bnm 发表于 2016-11-7 14:01
这不是入学笔试的时候要交十道题里面的一道么。。

不知道呀
回复 使用道具 举报
这不是入学笔试的时候要交十道题里面的一道么。。
回复 使用道具 举报
我能说没明白啥意思么是按这个格式打印吗
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
不连续,简单两层for循环不行吧,里面得嵌套判断
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
最外层四条边,每条边平均3个元素,光这就两层循环了。还要进入内层,这就是要三层了吧。我是这个思路,做了半天没做好,明天再试一下
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
谈谈你的想法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马