程序中的数学模式一:梯度恒等模式

我一直认为,编程是我们大脑中解决问题的逻辑思维过程的语言描述,而与这种逻辑思维最相关的应该是其背后的数学逻辑。我相信很多编程问题虽然表面看千差万别,但是其背后隐含的数学本质和编程方法一定是相似的,将这一类问题的数学本质和编程方法抽象出来,就可以形成一类问题的模式。我希望在以后的编程中,遇到问题能够看出其背后的本质, 然后归纳概括出一些有用的模式。

模式一,梯度恒等模式。

该模式主要用到的是函数的映射思想,我发现在编程的过程中,映射的思想用得非常的多,例如,图形界面中的复选框的选择值映射成我们保存的一个有用的线性表或链表的下标值。

import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

/**
 * 思想 映射的思想。 也就是通过selcet 获得自变量x的取值, 对应于修改数组中的图片情况,  然后把这个图片情况映射到面板上。 
 * 分析, 在程序设计中, 设计很多映射 ,而这种映射往往都是以一一恒等的映射,  背后的因变量往往就是我们需要维护的数据结构。这种模式成为 一一映射模式。
 * @author Neuclil
 *
 */
public class ListDemo extends JFrame{

	/**
	 * @param args
	 */
	final int NUMBER_OF_FALGS = 9;
	
	private String[] flagTitles = {"Canada", "China", "Denmark", "France", "Germany",
			"India", "Norway", "United Kindgom", "United States of America"};
	
	private JList jlist = new JList(flagTitles);
	
	private ImageIcon[] imageIcons = {
		new ImageIcon("E:/MyEclipse空间/image/ca.gif"),
		new ImageIcon("E:/MyEclipse空间/image/china.gif"),
		new ImageIcon("E:/MyEclipse空间/image/denmark.gif"),
		new ImageIcon("E:/MyEclipse空间/image/fr.gif"),
		new ImageIcon("E:/MyEclipse空间/image/germany.gif"),
		new ImageIcon("E:/MyEclipse空间/image/india.gif"),
		new ImageIcon("E:/MyEclipse空间/image/norway.gif"),
		new ImageIcon("E:/MyEclipse空间/image/uk.gif"),
		new ImageIcon("E:/MyEclipse空间/image/us.gif")
	};
	
	private JLabel[] jlblImageViewer = new JLabel[NUMBER_OF_FALGS]; 
	
	public ListDemo(){
		JPanel p = new JPanel(new GridLayout(3,3,5,5));
		jlist.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
		
		for(int i = 0; i<NUMBER_OF_FALGS; i++){
			p.add(jlblImageViewer[i] = new JLabel());
			jlblImageViewer[i].setHorizontalAlignment(SwingConstants.CENTER);
		}
		
		add(p, BorderLayout.CENTER);
		add(new JScrollPane(jlist), BorderLayout.WEST);
		
		this.setLocationRelativeTo(null);
		this.setSize(650,500);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		
		jlist.addListSelectionListener(new ListSelectionListener() {
			
			@Override
			public void valueChanged(ListSelectionEvent e) {
				// TODO Auto-generated method stub
				int[] indices = jlist.getSelectedIndices();
				
				int i;
				
				for(i = 0; i < indices.length; i++){
					jlblImageViewer[i].setIcon(imageIcons[indices[i]]);
				}
				
				for(;i<NUMBER_OF_FALGS;i++){
					jlblImageViewer[i].setIcon(null);
				}
			}
		});
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ListDemo listDemo = new ListDemo();
	}
	

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值