java里java字符串转二维数组数组是二维数组么

JAVA基础:基本语法,字符串,数组
JAVA基础:基本语法,字符串,数组
JAVA懵比的小学员
今天进行第一块的复习,首先是环境的搭建,Java开发的首先任务就是环境变量的配置和环境的搭建,虽然现在大多数的开发工具都已经集成了这些,但是对于一个初学者来说,了解这些还是有些必要的,首先先配置一下JDK,下载JDK在sun公司的官网里下载即可(虽然被Oracle收购了,但还是习惯叫他sun公司),找到jdk安装路径,然后把路径黏贴到环境变量path里面,有图有真相,上图:然后在dos命令里面测试一下,如果有下面结果即为配置成功:环境变量配置好之后,我们就可以进行我们的java开发之旅了,下面进行java基本语法的复习了:一:首先说一下java中的语句规则:1.java每行代码以;结尾。2.Java中的注释有:(1)//注释一行以“//”开始,终止于行尾,一般作单行注释,可放在语句的后面(2)/*……*/一行或多行注释以“/*”开始,最后以“*/”结束,中间可写多行。(3)/**……*/以“/**”开始,最后以“*/”结束,中间可写多行。这种注释主要是为支持JDK工具javadoc而采用的。3.Java中的合法标示符要符合一下规则:11)要以大小写字母或者美元符号或者下划线开头,不能以数字开头2)标示符命名不能用关键字,关键字是java内部所用到的标示符,为了避免混淆,所以不能用。3)类,变量,方法名命名尽量有一定规则,不要随便命名,虽然系统不会报错,但是为了项目开发后期的维护,所以尽量起比较有意义的名字,并且命名要符合一定的规则,如驼峰规则。二:java基本数据类型Java数据类型被分为:基本数据类型和引用数据类型。Java中有8中基本数据类型:类型位长/b默认值取值范围布尔型(boolean)1falsetruefalse字节型(byte)80-128~127字符型(char)16‘\u0000’‘\u0000’~’\uffff’即0~65535短整型(short)160-整型(int)320-231~231-1长整型(long)640-263~263-1单精度(float)320.0+-1.4E-45或+-3.双精度(double)640.0+-4.9E-324或+-1.315E+308注:String类型不是基本数据类型,它被定义为类,属于引用数据类型。,由于字符串是常用的数据类型。Java提供了对String类型特殊操作,直接引用,例如:Strings=&helloworld&;三:引用类型引用类型是一个对象类型的,它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。很好理解吧,因为一个对象,比如说一个人,不可能是个数字也不可能是个字符啊,所以要想找它的话只能找它的地址了。接下来看看基本类型和引用类型变量的不同处理吧。基本类型自然是简单,声明是自然系统就给它空间了。例如,intbaijq;baijq=250;//声明变量baijq的同时,系统给baijq分配了空间。引用类型就不是了,只给变量分配了引用空间,数据空间没有分配,因为谁都不知道数据是什么啊,整数,字符?我们看一个错误的例子:MyDatetoday;today.day=4;//发生错误,因为today对象的数据空间未分配。那我们怎么给它赋值啊?引用类型变量在声明后必须通过实例化开辟数据空间,才能对变量所指向的对象进行访问。举个例子:MyDatetoday;//将变量分配一个保存引用的空间today=newMyDate;//这句话是2步,首先执行newMyDate,给today变量开辟数据空间,然后再执行赋值操作。四:定义变/常量和变量的初始化Java定义变量结构:类型变量名,这里的变量名要符合标示符规则1.变量的声明格式:类型变量名[,变量名]=初值,…;赋值:[类型]变量名=值如:inta=5,b=6,c,d;说明:(1)变量名必须在作用域中是唯一的,不同作用域中才允许相同名字的变量出现;(2)只要在同一代码块没有同名的变量名,可以在程序中任何地方定义变量,一个代码块就是两个相对的“{}”之间部分。2.变量的使用范围每个变量的使用范围只在定义它的代码块中,包括这个代码块中包含的代码块。在类开始处声明的变量是成员变量,作用范围在整个类;在方法和块中声明的变量是局部变量,作用范围到它的“}”;3.变量类型的转换Java可以将低精度的数字赋值给高精度的数字型变量,反之则需要强制类型转换。强制转换格式:(数据类型)数据表达式字节型短整型字符型整型长整型单精度实型双精度实型转化规律:由低到高变量与存储器有着直接关系,定义一个变量就是要编译器分配所需要的内存空间,分配多少空间,这就是根据我们所定义的变量类型所决定的。变量名实际上是代表所分配空间的内存首地址常量Java中的常量值是用文字串表示的,它区分为不同的类型,如整型常量123,实型常1.23,字符常量‘a’,布尔常量true、false以及字符串常量“Thisisaconstantstring”。Java的常量用final说明,约定常量名一般全部使用大写字母,如果是多个单词组合在一起的,单词之间用下划线连接,常量在程序执行时不可更改。如:finalinti=1;i=i+1;//错,i是final(常量),不可更改值例如:finaldoubleIP=3.14159D说明:默认类型为64位double双精度类型(D或d),数字后面加F或f则是32位float单精度(实数)类型五:运算符1、赋值运算符赋值运算符用于把一个数赋予一个变量。赋值运算符两边的类型不一致时,那么如果左侧的数据类型的级别高,则右边的数据将转换成左边的数据类型在赋予左边的变量,否则需要强制类型转换。赋值运算符包括=、+=、-=、*=、%=、/=等。2、算术运算符算数运算符用于对整型数或者浮点数进行运算,java语言中的算术运算符包括二元运算符和一元运算符。所谓的几元运算符即参加运算的操作数的个数。1)二元运算符Java的二元运算符有+(加)、-(减)、*(乘)、/(除)、%(取余数)。2)一元运算符Java的一元运算符有++(自加)、--(自减)3、关系运算符关系运算符用来比较两个值,返回布尔类型的值true或false。等于不等于小于小于等于大于等于大于==!=&&=&=&4、条件运算符条件运算符的作用是根据表达式的真假决定变量的值。1&格式:条件表达式?表达式2:表达式32&功能:条件表达式为true,取“表达式2”值,为false,取“表达式3”的值例:inta=0x10,b=010,max=a&b?a:b;System.out.println(max);//输出165、逻辑运算符运算符结果~按位非(NOT)(一元运算)&按位与(AND)|按位或(OR)^按位异或(XOR)&&右移&&&右移,左边空出的位以0填充;无符号右移&&左移&=按位与赋值|=按位或赋值^=按位异或赋值&&=右移赋值&&&=右移赋值,左边空出的位以0填充;无符号左移&&=左移赋值按位非(NOT)按位非也叫做补,一元运算符NOT“~”是对其运算数的每一位取反。例如,数字42,它的二进制代码为:经过按位非运算成为六:流程控制语句分支语句1.简单的if.....else语句If(条件){如果条件为真、、、、}Else{如果条件为假、、、、、、}2、只有if的语句:If(条件){如果条件为真,执行。。。如果为假,不执行}3、switch语句是多分枝语句,基本语法:Switch(expr){Casevalue1:SB........CasevalueN:SBDefault:SB}注:1.expr必须是与int类型兼容的类型,即为byte,short,char和int类型中的其中一种2.CasevalueN:中valueN也必须是int类型兼容的类型,并且必须是常量3.各个case子句的valueN表达式的值不同4.Switch语句中只能有一个default子句。循环语句1.while语句2.do......while语句(此处省略三百字)3.for语句基本格式:for(初始化;循环条件;迭代部分)功能:(1)第一次进入for循环时,对循环控制变量赋初值;(2)根据判断条件检查是否要继续执行循环。为真执行循环体内语句块,为假则结束循环;(3)执行完循环体内语句后,系统根据“循环控制变量增减方式”改变控制变量值,再回(3)到步骤(2)根据判断条件检查是否要继续执行循环。4.流程跳转语句:break,continue和return语句用来控制流程的跳转1)break:从switch语句,循环语句或标号标识的代码块中退出2)continue:跳出本次循环,执行下次循环,或执行标号标识的循环体;3)return:退出本方法,跳到上层调用方法。4)Break语句和continue语句可以与标号联合使用。标号用来标识程序中的语句,标号的名字可以是任意的合法标识符。带有标号的循环体:Loop:switch(expr){}七:字符串字符串的几种用法:拼接直接用“+”把两个字符串拼接起来例如:StringfirstName=“li”;StringsecondName=“ming”;StringfullName=firstName+secondN检测字符串是否相等检测两个字符串内容是否相等时使用“equals”;比较两个字符串的引用是否相等时用“==”得到字符串的长度字符串变量名.String,StringBuffer,StringBuild区别String字符串常量StringBuffer字符串变量(线程安全)StringBuilder字符串变量(非线程安全)简要的说,String类型和StringBuffer类型的主要性能区别其实在于String是不可变的对象,因此在每次对String类型进行改变的时候其实都等同于生成了一个新的String对象,然后将指针指向新的String对象,所以经常改变内容的字符串最好不要用String,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后,JVM的GC就会开始工作,那速度是一定会相当慢的。而如果是使用StringBuffer类则结果就不一样了,每次结果都会对StringBuffer对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用StringBuffer,特别是字符串对象经常改变的情况下。而在某些特别情况下,String对象的字符串拼接其实是被JVM解释成了StringBuffer对象的拼接,所以这些时候String对象的速度并不会比StringBuffer对象慢,而特别是以下的字符串对象生成中,String效率是远要比StringBuffer快的:StringS1=“Thisisonlya”+“simple”+“test”;StringBufferSb=newStringBuilder(“Thisisonlya”).append(“simple”).append(“test”);你会很惊讶的发现,生成StringS1对象的速度简直太快了,而这个时候StringBuffer居然速度上根本一点都不占优势。其实这是JVM的一个把戏,在JVM眼里,这个StringS1=“Thisisonlya”+“simple”+“test”;其实就是:StringS1=“Thisisonlyasimpletest”;所以当然不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的String对象的话,速度就没那么快了,譬如:StringS2=“Thisisonlya”;StringS3=“simple”;StringS4=“test”;StringS1=S2+S3+S4;这时候JVM会规规矩矩的按照原来的方式去做在大部分情况下StringBuffer&StringStringBufferJava.lang.StringBuffer线程安全的可变字符序列。一个类似于String的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。StringBuffer上的主要操作是append和insert方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append方法始终将这些字符添加到缓冲区的末端;而insert方法则在指定的点添加字符。例如,如果z引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用z.append(&le&)会使字符串缓冲区包含“startle”,而z.insert(4,&le&)将更改字符串缓冲区,使之包含“starlet”。在大部分情况下StringBuilder&StringBufferjava.lang.StringBuilderjava.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与StringBuffer兼容的API,但不保证同步。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer要快。两者的方法基本相同。八、数组数组是有序数据的集合,数组中的每个元素具有相同的数组名,根据数组名和下标来唯一确定数组中的元素。使用时要先声明后创建1、一位数组1)一维数组的声明格式:数据类型数组名或数据类型数组名例:S说明:定义数组,并不为数据元素分配内存,因此“”中不用指出数组中元素个数。2)一维数组的创建与赋值创建数组并不是定义数组,而是在数组定义后,为数组分配存储空间,同时对数组元素进行初始化(1)用运算符new分配内存再赋值格式:数组名=new数据类型[size]例:a=newint[3];//产生a[0],a[1],a[2]三个元素a[0]=8;a[1]=8;a[2]=8;3)直接赋初值并定义数组的大小例:inti={4,5,010,7,3,2,9};Stringnames={“张三”,”李四”,”王五”,”宋七”};4)测试数组长度(补充)格式:数组名.lengthcharc={‘a’,’b’,’c’,’北’,’京’};System.out.print(c.length);//输出52、多维数组以二维数组为例例://定义一个二维数组d=newint[3][4];//分配3行4列数组内存inta=newint[2];a[0]=newint[3];//第二维第一个元素指向3个整型数a[1]=newint[5];//第二维第一个元素指向5个整型数注意:Java可以第二维不等长inti={{0},{1,4,5},{75,6},{8,50,4,7}};//定义和赋初值在一起下面数组定义正吴的判断inta=newint[10,10]//错inta[10][10]=newint//错inta=newint[10][10]//对inta=newint[10][10]//对inta=newint[10][10]//对注意:java中二维数组分配空间是第二维可以为空,但是第一维必须分配内存。最后以一个经典的helloworld代码结束本章的总结publicclassHelloWorldApp{publicstaticvoidmain(Stringargs){System.out.println(“helloworld!”);}}
本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。
JAVA懵比的小学员
百家号 最近更新:
简介: JAVA笔记,经验分享,欢迎交流!
作者最新文章下次自动登录
现在的位置:
& 综合 & 正文
Java二维数组的声明和初始化
1.二维数组可以看成以数组为元素的数组; 2.Java中二维数组的声明和初始化应按照从高维到低维的顺序进行. 实例: 静态初始化: Array2.java: 程序代码
public class Array2
public static void main(String args[]) {
int a[][] = {{1,2},{3,4,5,6},{7,8,9}} ;
for(int i=0 ; i &a. i++) {
for(int j=0 ; j&a[i]. j++) {
System.out.println("a[" + i + "][" + j + "]=" + a[i][j]) ;
动态初始化: 程序代码
public class Array2D
public static void main(String args[]) {
String s[][] ;
s = new String[3][] ;
s[0] = new String[2] ;
s[1] = new String[3] ;
s[2] = new String[2] ;
for(i=0 ; i&s. i++) {
for(j=0 ; j &s[i]. j++) {
s[i][j] = new String("我的位置是:" + i + "," + j) ;
for(i=0 ; i&s. i++) {
for(j=0 ; j&s[i]. j++) {
System.out.println(s[i][j]) ;
二维数组就是数组成员是一维数组的一维数组
三维数组就是数组成员是二维数组的一维数组
最后一个值是可以待定的,动态的么。
下面哪个语句正确地声明一个整型的二维数组? 多选A int a[][] = new int[][]; B int a[10][10] = new int[][]; C int a[][] = new int[10][10]; D int [][]a = new int[10][10]; E int []a[] = new int[10][10];
a[]是一维数组,又定义 int[] 一维数组,所以合起来就是
int[] a[] 与int[][] a 等效
&&&&推荐文章:
【上篇】【下篇】博客访问: 682289
博文数量: 426
博客积分: 420
博客等级: 准将
技术积分: 4606
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Java
说明:1.我的测试平台winXP,JBuildX(jdk1.4.2_04),vs.net2003.2.参照网上的代码修改的,按照原先代码的分析,多维数组和这种二维数组的实现方式类似,没有测试。3.这里不再分析,二维数组就是Object的元素仍然是Object,然后递归地一层层访问Object&&&&& 用到的函数:&&&&& env->GetArrayLength(array)&&&&&&&&&&& //得到数组长度&&&&& env->GetObjectArrayElement(array, i)&&//取得Object数组第i个元素&&&&& env->GetStringUTFChars(string, 0)&&&&&//转换类型得到c里面的char[]&&&&& env->ReleaseStringUTFChars(string, chars)&&&&&& //释放空间4.其中修改做了强制的类型转换,否则无法编译通过,不过不太清楚这种强制转换会不会出问题。
以下是我的代码
//TestArray.javapublic class TestArray {& static& {&&& System.loadLibrary("TestArray");& }& public static native void PrintArrays(String[][] Info);& public static void main(String[] args) {&&& String[][] info = {&&&&&&& {"INFO_00", "INFO_01", "INFO_02"},&&&&&&& {"INFO_10", "INFO_11"}&&& };
&&& PrintArrays(info);& }}
//TestArray.cpp#include"TestArray.h"#includeJNIEXPORT void JNICALL Java_TestArray_PrintArrays& (JNIEnv *, jclass, jobjectArray);
void main(){&cout<<"main function"<<}
JNIEXPORT void JNICALL Java_TestArray_PrintArrays& (JNIEnv * env, jclass myclass, jobjectArray array){&int size = env->GetArrayLength(array);&for (int i = 0; i < i++) {&&jobjectArray myarray =(jobjectArray) (env->GetObjectArrayElement(array, i));&&int length = env->GetArrayLength(myarray);&&cout<<"length:&& "<<length<<&&for (int j = 0; j < j++) {&&&jstring string = (jstring)(env->GetObjectArrayElement(myarray, j));&&&const char * chars =& env->GetStringUTFChars(string, 0);&&&cout<<chars<<"&&";&&& env->ReleaseStringUTFChars(string, chars);&&}&&cout<<&}}
原先网上的文章代码如下,编译得时候出的错也没有记录,可能是因为平台的原因:Java Code:
public class TestArray {static {System.loadLibrary("test");}
public static native void PrintArrays(String[][] Info);
public static void main(String[] args) {String[][] info = {{"INFO_00", "INFO_01", "INFO_02"},{"INFO_10", "INFO_11"}};
PrintArrays(info);}}
Native Code:
#include "TestArray.h"
JNIEXPORT void JNICALL Java_TestArray_PrintArrays(JNIEnv *env, jclass class, jobjectArray array){int size = (*env)->GetArrayLength(env, array);for (int i = 0; i < i++) {jarray myarray = ((*env)->GetObjectArrayElement(env, array, i));int leng = (*env)->GetArrayLength(env, myarray);printf("length: %dn", leng);for (int j = 0; j < j++) {jstring string = ((*env)->GetObjectArrayElement(env, myarray, i));const char * chars = (*env)->GetStringUTFChars(env, string, 0);printf("%s n", chars);(*env)->ReleaseStringUTFChars(env, string, chars);}}}
在Solaris下,编译运行命令如下:
#javac TestArray.java
#javah TestArray
#cc -G -I/usr/java/include -I/usr/java/include/solaris -o libtest.so TestArray.c
#export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
#java TestArray
……复制过来之后,格式好乱-_-||
阅读(3674) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。博客分类:
有一个固定内容的二维数组,
用JAVA形式展现出来,而且方便取值。
方案一:用Map保存这些值,例如 行索引用字符a,b,c,d,e....表示
列索引用字符0,1,2,3,4,5....表示
初始化:
map.put(a+0,value1);
map.put(a+1,value2);
map.put(b+0,value3);
map.put(b+1,value4);
取值:map.get(a0)
--------------
方案二:用二维护数组直接表示出来
arr[][]={
&&&&&&&& {value1,value2},
&&&&&&&& {value3,value4}
&&&&&&& }
取值时用两个方法来定位行列,之后取出值
getRowIndex(RowName)----&字符a对应的是0行,字符b对应的是1行
getColumnIndex(ColumnName)----&字符0对应的是0列,字符b对应的是1列
方案三:对于固定的一些值,查看值的规律,查找有数组中的重复值。
例如
1 2 3 1 2 3
2 3 1 2 3 1
3 1 2 3 1 2
1 1 1 2 2 2
3 3 3 2 2 2
3 1 2 3 2 1
3 2 1 3 2 1
如上图只有1,2,3三个值。
而行列矩阵是6*7,所以总维度是7个,即入口是七个参数,出口的值总共有3个。
用电路学的归纳法,把相同的路径归纳出来,最终出来的会是简单的几个入口值分别对应3个出口值。
此方法相对于以上两方案是可维护性差,后接手的人很难猜出作者意图且单元测试困难。
优点是运算快,不占内存!
求三方案的不足处,及是否有更好的方案可解决。
浏览: 252532 次
来自: 芜湖
还有屌丝啊
非常好啊......
为什么我执行(生成的不以-jar-with-depend ...
怒赞一个!!!很棒!
关键是,我想mvn package就打包好,请问,怎么做
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 java list 二维数组 的文章

 

随机推荐