使用Java打印数字组成的魔方阵及字符组成的钻石图形

打印魔方阵

输入一个自然数N(2≤N≤9),要求输出如下的魔方阵,即边长为N*N,元素取值为1至N*N,1在左上角,呈顺时针方向依次放置各元素。  N=3时:

   1  2  3
   8  9  4
   7  6  5

【输入形式】 从标准输入读取一个整数N。 
【输出形式】 向标准输出打印结果。输出符合要求的方阵,每个数字占5个字符宽度,向右对齐,在每一行末均输出一个回车符。
【输入样例】  4
【输出样例】

  1  2  3  4
  12  13  14  5
  11  16  15  6
  10  9  8  7

实现:

package cn.dfeng;
import java.util.Arrays;
import java.util.Scanner;
public class Maze {
  enum Direction{
    UP, DOWN, RIGHT, LEFT;
  }
  public int[][] buidMaze( int n ){
    int[][] maze = new int[n][n];
    for( int[] a : maze ){
      Arrays.fill(a, 0);
    } 

    int col = 0;
    int row = 0;
    int counter = 1;
    Direction d = Direction.RIGHT; 

    while( true ){
      if( maze[row][col] == 0 ){
        maze[row][col] = counter++; 

        switch (d) {
          case RIGHT:
            if( col + 1< n && maze[row][col + 1] == 0){
              col ++;
            }else{
              d = Direction.DOWN;
              row ++;
            }
            break;
          case DOWN:
            if( row + 1 < n && maze[row + 1][col] == 0){
              row ++;
            }else{
              d = Direction.LEFT;
              col --;
            }
            break;
          case LEFT:
            if( col - 1 >= 0 && maze[row][col-1] == 0){
              col --;
            }else{
              d = Direction.UP;
              row --;
            }
            break;
          default:
            if( row - 1 >= 0 && maze[row - 1][col] == 0){
              row --;
            }else{
              d = Direction.RIGHT;
              col ++;
            }
            break;
        } 

      }else{
        break;
      }
    }
    return maze;
  } 

  public void printMaze( int[][] maze ){ 

    for( int[] row : maze ){
      for( int i : row ){
        System.out.printf("%3d", i);
      }
      System.out.println();
    } 

  }
  /**
   * @param args
   */
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("Please input the size of the maze:");
    int size = sc.nextInt();
    Maze maze = new Maze();
    int[][] m = maze.buidMaze( size );
    maze.printMaze( m );
  }
}

打印钻石图形

钻石图的效果大概就是这样的:

下面我们来看代码

package cn.dfeng;
/**
 * 该类能够用*打印大小的钻石图形
 * @author dfeng
 *
 */
public class Drawer { 

  /**
   * 打印钻石图形
   * @param n 钻石大小
   */
  public void printDiamond( int n ){
    System.out.println();
    int i = 0;
    boolean flag = true;
    while( i >= 0 ){
      if (i < n) {
        for (int j = 0; j < n - i; j++) {
          System.out.print(" ");
        }
        for (int j = n - i; j <= n + i; j += 2) {
          System.out.print("* ");
        }
        System.out.println();
      }
      if (i == n) {
        flag = false;
        i--;
      }
      if (flag) {
        i++;
      } else {
        i--;
      }
    } 

  }
}
(0)

相关推荐

  • 详解Java图形化编程中的鼠标事件设计

    鼠标事件的事件源往往与容器相关,当鼠标进入容器.离开容器,或者在容器中单击鼠标.拖动鼠标时都会发生鼠标事件.java语言为处理鼠标事件提供两个接口:MouseListener,MouseMotionListener接口. MouseListener接口 MouseListener接口能处理5种鼠标事件:按下鼠标,释放鼠标,点击鼠标.鼠标进入.鼠标退出.相应的方法有: (1) getX():鼠标的X坐标 (2) getY():鼠标的Y坐标 (3) getModifiers():获取鼠标的左键或右键

  • JavaWeb实现图形报表折线图的方法

    本文实例讲述了JavaWeb实现图形报表折线图的方法.分享给大家供大家参考,具体如下: 步骤说明: 1. 导入log4j.jar,jfreechart-0.9.18.jar,jdom.jar,jcommon-0.9.3.jar四个jar包 2. 在某个包中写入Tuxin.Java类 package com.mengya.util; import java.awt.Color; import java.awt.Font; import java.io.PrintWriter; import jav

  • 用JSP创建可重用的图形背景

    有一个技术可以在Java Server Pages(JSP)中产生整齐.精细的直方图,它可以用来作为可重用的背景.为了达到可重用性的目的,你需要使得图形的尺寸可以调整,你还应该管理直方块以免它们越过图形区域的边界.然后,你还需要把图形数据编码为一种可用的图形格式.我们将利用这个代码例子介绍本技巧. 你需要什么?为了开始运行本文所给出的例子,你需要JDK 1.2或者它的更高版本(http://java.sun.com).你还需要一个支持JSP的Web服务器.我在Tomcat上测试该例子,我用com

  • 轻松使用JSP生成饼图

    作者: BUILDER.COM JSP提供了很多简单实用的工具,其中包括从数据库中读出数据,发送数据,并能够把结果显示在一个饼状图形.现在让我们看看这一简单而实用的方法. 你所需要的东西 转自:动态网制作指南 www.knowsky.com 为了能正确运行这一文章相关的范例,你必须需要JDK 1.2或更高的版本.一个关系数据库管理系统.一个JSP网络服务器.我都是在Tomcat调试这些例子,同时我也使用了Sun Java 2 SDK发布的com.sun.image.codec.jpegclass

  • java图形界面编程之模拟血压计

    复制代码 代码如下: package GraphicsCanvas; import java.awt.BorderLayout;import java.awt.Canvas;import java.awt.Color;import java.awt.Graphics;import java.awt.Image;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JBut

  • Java Web开发之图形验证码的生成与使用方法

    本文实例讲述了Java Web开发之图形验证码的生成与使用方法.分享给大家供大家参考.具体如下: 图形验证码的主要目的是为了增强的安全性,增加用户通过遍历所有可能性来破解密码的难度. 图形验证码的使用包括如下3部分: ① 图形验证码的生成: ② 在页面中的使用: ③ 验证: 1.图形验证码的生成 假设在Servlet生成图形验证码,在JavaBean或者JSP中生成的基本过程是相同的.设计如下过程: ① 设置响应的文档类型: ② 生成随机码: ③ 把随机码保存到session中: ④ 生成图片:

  • Java计算几何图形面积的实例代码

    对于每个几何图形而言,都有一些共同的属性,如名字.面积等,而其计算面积的方法却各不相同.为了简化开发,请编写程序,定义一个超类来实现输入名字的方法,并使用抽象方法来计算面积. 思路分析: 所谓超类就是抽象父类,该抽象类中有两个方法,分别用来获取图形的名称和图形的面积.要获得图形的名称,通过类的getClass().getSimpleName()方法可以实现:要获得图形的面积,因为计算面积的方法各不相同,所以该方法是个抽象方法.定义一个子类表示圆形,圆形的半径通过构造方法获得,圆形的面积通过重写超

  • jsp中点击图片弹出文件上传界面及预览功能的实现

    花了两天时间琢磨一下图片预览的功能 任务需求如下: 1:jsp页面中有一个图片(pic_1) 2:点击图片弹出类似于资源管理器的界面 3:选择完某一个图片之后在pic_1处预览 我在IE8上试验下面这段代码,可以实现上述功能,没有在别的浏览器中测试,如果各位朋友知道多种浏览器的支持方法,请赐教,共同学习,谢谢. 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http:

  • jsp实现生成中国国旗图片效果代码

    本文实例讲述了jsp实现生成中国国旗图片效果代码.分享给大家供大家参考,具体如下: 图片截图如下: 具体代码如下: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page contentType="image/jpeg" import="java.awt.*, java.awt.image.*,jav

  • 解析Java图形化编程中的文本框和文本区

    在图形界面中,文本框和文本区是用于信息输入输出的组件. 文本框 文本框(JTextField)是界面中用于输入和输出一行文本的框.JTextField类用来建立文本框.与文本框相关的接口是ActionListener. 文本框处理程序的基本内容有以下几个方面: 声明一个文本框名. 建立一个文本框对象. 将文本框对象加入到某个容器. 对需要控制的文本框对象注册监视器,监听文本框的输入结束(即输入回车键)事件. 一个处理文本框事件的方法,完成对截获事件进行判断和处理. JTextField类的主要构

  • 使用Java编写图形化的菜单的教程

    有两种类型的菜单:下拉式菜单和弹出式菜单.本章只讨论下拉式菜单编程方法.菜单与JComboBox和JCheckBox不同,它们在界面中是一直可见的.菜单与JComboBox的相同之处是每次只可选择一个项目. 在下拉式菜单或弹出式菜单中选择一个选项就产生一个ActionEvent事件.该事件被发送给那个选项的监视器,事件的意义由监视器解释. 菜单条.菜单和菜单项 下拉式菜单通过出现在菜单条上的名字可视化表示,菜单条(JMenuBar)通常出现在JFrame的顶部,一个菜单条显示多个下拉式菜单的名字

随机推荐