文档章节

保证程序运行整型数据有效

tcxu
 tcxu
发布于 2017/08/29 16:11
字数 1758
阅读 82
收藏 0

码上生花,ECharts 作品展示赛正式启动!>>>

Java 四种基本整型数据类型变量的操作限制 

编译运行以下程序,可以得到Java四种基本整型数据类型:byte, short, int, 和 long 的取值范围。

public class Limits{
	public static void main(String args[]){
/* 打印六种数字基本类型变量的最大值和最小值 */   
System.out.println("长型最大值 LONG_Max: " + Long.MAX_VALUE);
System.out.println("长型最小值 LONG_Min: " + Long.MIN_VALUE);
System.out.println("整型最大值 Int_Max: " + Integer.MAX_VALUE);
System.out.println("整型最小值 Int_Min: " + Integer.MIN_VALUE);
System.out.println("短型最大值 SHORT_Max: " + Short.MAX_VALUE);
System.out.println("短型最小值 SHORT_Min: " + Short.MIN_VALUE);
System.out.println("字节型最大值 BYTE_Max: " + Byte.MAX_VALUE);
System.out.println("字节型最小值 BYTE_Min: " + Byte.MIN_VALUE);
	}
}

输出:

长型最大值 LONG_Max: 9223372036854775807

长型最小值 LONG_Min: -9223372036854775808

整型最大值 Int_Max: 2147483647

整型最小值 Int_Min: -2147483648

短型最大值 SHORT_Max: 32767

短型最小值 SHORT_Min: -32768

字节型最大值 BYTE_Max: 127

字节型最小值 BYTE_Min: -128

知识要点:

  • Java四种基本整型数据类型变量 (长型 long、整型 int、短型 short、和字节型 byte),  需要不同的存储空间(分别为 8、4、2、1 字节),表示不同的数据取值范围。
  • Java 字节型 (byte)变量,需1 个字节的存储空间,所能表示的最大正整数为:2^7 - 1 = 127,最小负整数:-128。
  • Java 整型 (int)变量,需4 个字节的存储空间,所能表示的最大正整数为:2^31 - 1 = 2147483647,最小负整数:-2147483648。
  • Java 为每个基本数据类型(primitive data type)设计了一个对应的类, 来处理有关事宜。四个基本整型数据类型都对应有各自的包装类(或称外覆类或数据类型类, Wrapper Class)。
  • 这四种基本整型数据类型的包装类分别是:Long、Integer、Short、和 Byte。 它们都用静态字段:MAX_VALUE 和MIN_VALUE 分别表明所能存储的最大正整数和最小负整数。

 

有效数据 Valid Data

N的阶乘是指 从1乘以2乘以3乘以4 一直乘到所要求的数 n!=1×2×3×……×n  或 n!=n×(n-1)!

程序分别通过 byte, short, int, long 类型变量计算阶乘,并使用 BigDecimal 和 BigInteger 进行对比计算,结果展示如图:

分析:

  • 与其余较可靠渠道的计算结果相比, byte, short, int, long变量,先后分别第一次出现了6、8、13、21阶乘的“垃圾”数据。这四个单元格背景均标为红色。
  • 在 字节型、短型、整形、和 长型 这四列里,每列 红单元格以下的单元格数据,都是“垃圾”。
  • 选择 byte 为变量类型,只能正确计算最高 5 的阶乘; 选择 short, 最高7的阶乘;选择 int, 最高 12 的阶乘; 选择long, 最高20的阶乘。
    选择的变量类型 最高能计算的阶乘 n!
    byte 5
    short 7
    int 12
    long 20
  • 通过 BigDecimal 和/或 BigInteger,才能得到更高(n>20)阶乘的数据。

供上述比较分析用的java程序代码,如下:

import java.math.BigDecimal;
import java.math.BigInteger;
import java.awt.Graphics;
import java.awt.Component;
import java.awt.Color;
import java.lang.*; 
import javax.swing.*;
import javax.swing.table.TableColumn;
import javax.swing.table.DefaultTableCellRenderer;

public class Factorial_0 extends JFrame {

  byte byteFac=1;//用字节型存储阶乘的变量,0阶乘为1
  short shortFac=1;//用短型存储阶乘的变量,0阶乘为1
  int iFactoria1=1;//用整型存储阶乘的变量,0阶乘为1
  long lFactoria1=1;//用长型存储阶乘的变量,0阶乘为1
  /*创建代表整数1的BigDecimal对象*/
  BigDecimal bFactorial = new BigDecimal("1");
  /*创建代表整数1的BigInteger对象*/
  BigInteger big= new BigInteger("1");
  /*创建储存数据的二维字符串类型的数组 data*/
  String data[][]=new String[27][7]; 
  /*创建表的列(字段)名称*/
  String fields[] = {"阶乘", "用字节型", "用短型short", "用整型 int ", 
  "通过长型 long 计算", "使用 BigDecimal 计算","使用 BigInteger 计算"};
	
	
public static void main(String args[]) { //主方法代码块开始
		new Factorial_0();
	}//主方法代码块结束

public void makeFace(JTable table) {  // 渲染单元格背景色 方法 makeFace 开始
        try {  
            DefaultTableCellRenderer tcr = new DefaultTableCellRenderer() {  
  
                public Component getTableCellRendererComponent(JTable table,  
                        Object value, boolean isSelected, boolean hasFocus,  
                        int row, int column) {  
                    if (row % 2 == 0) {  
                        setBackground(Color.white);//设置奇数行底色  
                    } else if (row % 2 == 1) {  
                        setBackground(new Color(255, 204, 255));//设置偶数行底色  
                    }
                    if ((row == 5 && column == 1) || (row == 7 && column == 2)
                     || (row == 12 && column == 3) || (row == 20 && column == 4)) 
                    setBackground(Color.red); 
          
                    return super.getTableCellRendererComponent(table, value,  
                            isSelected, hasFocus, row, column);  
                }  
            };  
            for (int i = 0; i < table.getColumnCount(); i++) {  
                table.getColumn(table.getColumnName(i)).setCellRenderer(tcr);  
            }  
        } catch (Exception ex) {  
            ex.printStackTrace();  
        }  
    } // 方法 makeFace 结束
    

public Factorial_0(){ //类 Factorial 的构造方法代码块 开始
	super("查看用各种方法储存正整数的能力 :计算阶乘");
	factorial();
	JTable table = new JTable(data,fields);
	table.getColumnModel().getColumn(0).setMaxWidth(70);
	table.getColumnModel().getColumn(1).setMaxWidth(70);
	table.getColumnModel().getColumn(2).setMaxWidth(70);
	table.getColumnModel().getColumn(3).setMaxWidth(80);
	table.getColumnModel().getColumn(4).setMaxWidth(200);
	table.getColumnModel().getColumn(5).setMaxWidth(300);
	table.getColumnModel().getColumn(6).setMaxWidth(300);
	makeFace(table); // 调用 makeFace 方法,渲染单元格背景色
	JScrollPane pane = new JScrollPane( table );//将table放入一个有滚动条的视口
    getContentPane().add(pane);//将视口放置于带有标题和边框的顶层窗口JFrame
	setVisible(true);
	setSize(850,500);
	} // 构造方法代码块 结束

public void factorial(){ // 方法 factorial() 计算阶乘开始
for (int i=1; i<27;i++){ //用for循环语句输出1到16的阶乘
    byteFac 	*=i;
    shortFac 	*=i;
    iFactoria1 	*=i;  //将i的阶乘存入整型变量
    lFactoria1 	*=i;  //将i的阶乘存入长型变量
    bFactorial = bFactorial.multiply(new BigDecimal(Integer.toString(i)));
    big = big.multiply(new BigInteger(Integer.toString(i)));
	/*将数据以字符串形式存入二维数组data*/
	data[i-1][0] = i + "的阶乘:";
	data[i-1][1] = Byte.toString(byteFac); //将byte型数据转换成字符串型,存入data数组
	data[i-1][2] = Short.toString(shortFac);//将short型数据转换成字符串型,存入data数组
	data[i-1][3] = Integer.toString(iFactoria1);//将int型数据转换成字符串型,存入data数组
	data[i-1][4] = Long.toString(lFactoria1);//将long型数据转换成字符串型,存入data数组
	data[i-1][5] = bFactorial.toString();//将BigDecimal数据对象转换成字符串型,存入data数组
	data[i-1][6] = big.toString();//将BigInteger数据实体转换成字符串型,存入data数组
	}
	/*将各种类型能表示的最大正整数值,以字符串形式存入二维数组 data 的最后一行 */
	data[26][0]="MAX_VALUE";
	data[26][1]= Byte.toString(Byte.MAX_VALUE);
	data[26][2]= Short.toString(Short.MAX_VALUE);
	data[26][3]= Integer.toString(Integer.MAX_VALUE);
	data[26][4]= Long.toString(Long.MAX_VALUE);
	data[26][5]="无 MAX_VALUE 字段";
	data[26][6]="无 MAX_VALUE 字段";	
  }  // 方法 factorial() 代码块结束
}  // 类 Factorial_0 定义结束

 

© 著作权归作者所有

tcxu

tcxu

粉丝 75
博文 6
码字总数 5126
作品 0
海淀
其他
私信 提问
加载中
请先登录后再评论。
操作系统原理之进程管理(第二章)

一、进程的描述 程序的顺序执⾏: 先进⼊内存的程序先执⾏,在⼀个程序执⾏完毕之前,不能执⾏其他程序。 特点:顺序性、 封闭性 、可再现性 程序的并发执⾏:程序并发执⾏是指在同⼀时间间隔...

osc_wc3dz06y
2019/10/06
1
0
C语言数据类型中的基本类型

  变量的数据类型   在应用程序中,由于数据存储时所需要的容量各不相同,因此,为了区分不同的数据,需要将数据划分为不同的数据类型。C语言中的数据类型有很多种,具体分类如下图所示。...

C语言
2017/04/12
0
0
Microsoft Office Access

Microsoft Office Access各版本下载地址:http://www.accessoft.com/download.html 简介 access(微软发布的关联式数据库管理系统)一般指Microsoft Office Access Microsoft Office Access...

osc_bwyiczki
2018/03/25
2
0
【Qt笔记】二进制文件读写

在上一章中,我们介绍了有关和两个类的使用。我们提到,提供了、等基本的操作。同时,Qt 还提供了更高一级的操作:用于二进制的流和用于文本流的。本节,我们将讲解有关的使用以及一些技巧。...

大道无名
2016/07/31
96
0
C++输入输出流 cin/cout 及格式化输出简介

  C++ 可通过流的概念进行程序与外界环境( 用户、文件等 )之间的交互。流是一种将数据自源( source )推送至目的地( destination )的管道。在 C++ 中,与标准输入/输出相关的流可通过头文件...

osc_7shyb795
2019/08/26
3
0

没有更多内容

加载失败,请刷新页面

加载更多

Elasticsearch如何查询使用JSON字符串的DSL

背景 Java处理ES查询逻辑,有一种情况是用户从其他地方粘贴或者手动输入的JSON字符串的DSL语句;这个时候就没法使用QueryBuilder来构建所需要的SearchSource。查了查发现有个Wrapper的方式可...

叫我哀木涕
今天
17
0
JDBC:ResultSet Types

ResultSet Types 用于确定ResultSet的某些特征和功能。 ResultSet.TYPE_FORWARD_ONLY 只能调用 next,不能调用 previous 。否则报错 ResultSet.TYPE_SCROLL_INSENSITIVE 能调用 next/previou...

mrsuperli
昨天
7
0
Cesium笔记(3):基本控件简介—ImageryProvider地图瓦片地图配

cesiumjs中可定制多种图层,可以使用互联网上很多地图提供商的图层数据,也可以使用自己的地图数据。Cesium支持多种标准化格式的GIS瓦片服务,可以把栅格图层绘制到地球的表面——cesiumjs的...

zhoulujun
昨天
15
0
跟小伟一起学习类加载机制

我们在学习 java 基础的时候,从宏观上了解了一个类到运行大致是:.java 文件通过 javac 编译器编译得到 .class 文件,在用到该类时,jvm 会加载该 class 文件,并创建对应的 class 对象,将...

niceyoo
昨天
10
0
Electron整合React使用搭建开发环境

Electron整合React使用搭建开发环境 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 简介 用于构建用户界面的 ...

归子莫
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部