博文
Java中的String数据类型(2009-10-11 21:27:00)
摘要:
Java中的String数据类型
1. 首先String不属于8种基本数据类型,String是一个对象。
因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。
2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null;
3. String str=”kvill”;
String str=new String (“kvill”);的区别:
在这里,我们不谈堆,也不谈栈,只先简单引入常量池这个简单的概念。
常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。
看例1:
String s0=”kvill”;
String s1=”kvill”;
String s2=”kv” + “ill”;
System.out.println( s0==s1 );
System.out.println( s0==s2 );
结果为:
true
true
首先,我们要知道Java会确保一个字符串常量只有一个拷贝。
因为例子中的s0和s1中的”kvill”都是字符串常量,它们在编译期就被确定了,所以s0==s1为true;而”kv”和”ill”也都是字符串常量,当一个字符串由多个字符串常量连接而成时,它自己肯定也是字符串常量,所以s2也同样在编译期就被解析为一个字符串常量,所以s2也是常量池中”kvill”的一个引用。
所以我们得出s0==s1==s2;
用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间。
看例2:
String s0=”kvill”;
String s1=new String(”kvill”);
String s2=”kv” + new String(“ill”);
Sys......
点击一个Button显示设定的信息的函数(2009-10-08 14:08:00)
摘要:
SetWindowText函数可以实现。
void CMFC_xoDlg::OnBnClickedButton9()
{
// TODO: 在此添加控件通知处理程序代码
CWnd* pWnd = GetDlgItem(IDC_BUTTON9);
pWnd->SetWindowText(_T("X"));
}......
极其脑残的XO游戏程序(2009-09-29 15:16:00)
摘要:
#include<iostream>
//#include<cstdlib>
using namespace std;
void main()
{
char chess[3][3]={'1','2','3', '4','5','6', '7','8','9'};
int i,j;
char input1,input2;
cout<<"The chess board is as follows(We use numbers to denote the chess):"<<endl;
for(i=0;i<3;i++)
for(j=0;j<3;j++){
cout<<chess[i][j]<<" ";
if((j+1)%3==0)
cout<<endl;
}
////////////////////////////////////////////////////////
// start game:
for(int k=0;k<5;k++){
// input the chess of player1:
cout<<"input the number represent the position where player1 want to set the chess:"<<endl;
cin>>input1;
for(i=0;i<3;i++)
for(j=0;j<3;j++){
if(input1==chess[i][j])
&nbs......
PKU ACM 1128 ???(2009-09-27 20:29:00)
摘要:
1128这道题里面的第二行的帧:
EEEEEE.. ........ ........ ..BBBB.. .C.C....
组合之后为什么会是ECBCBB..这样啊???
不是要按照字母序列排序吗?不是ECBBBB.. 吗???
......
括号序列(2009-09-26 00:52:00)
摘要:括号序列
【问题描述】
定义如下规则序列(字符串):
1.空序列是规则序列;
2.如果S是规则序列,那么(S)和[S]也是规则序列;
3.如果A和B都是规则序列,那么AB也是规则序列。
例如,下面的字符串都是规则序列:
(),[],(()),([]),()[],()[()]
而以下几个则不是:
(,[,],)(,()),([()
现在,给你一些由‘(’,‘)’,‘[’,‘]’构成的序列,你要做的,是找出一个最短规则序列,使得给你的那个序列是你给出的规则序列的子列。(对于序列a1,a2,…, 和序列bl,b2,…, ,如果存在一组下标1≤i1<i2<…< ≤m,使得aj= 对一切1≤j≤n成立,那么a1,a2…, 就叫做b1,b2,…, 的子列。
【输入】
输入文件仅一行,全部由‘(’,‘)’,‘]’,‘]’组成,没有其他字符,长度不超过100。
【输出】
输出文件也仅有一行,全部由‘(’,‘)’,‘]’,‘]’组成,没有其他字符,把你找到的规则序列输出即可。因为规则序列可能不止一个,因此要求输出的规则序列中嵌套的层数尽可能地少。
【样例】
bracket.in
([()
bracket.out
()[]() {最多的嵌套层数为1,如层数为2时的一种为()[()]}
【算法分析】
对于输入的括号序列字符串,从左向右进行查......
显示日历(2009-09-24 19:04:00)
摘要:
import javax.swing.JOptionPane;
public class PrintCalendar {
public static void main(String[] args)
{
String stringYear = JOptionPane.showInputDialog("Input the year(e.g. 2009):");
int year = Integer.parseInt(stringYear);
String stringMonth = JOptionPane.showInputDialog("Input the month:");
int month = Integer.parseInt(stringMonth);
printMonth(year,month);
}
static void printMonth(int year,int month)
{
printMonthTitle(year,month);
printMonthBody(year,month);
}
static void printMonthTitle(int year,int month)
{
System.out.println(" "+getMonthName(month)+" "+year);
System.out.println("------------------------------");
System.out.println(" Sun Mon Tue Wed Thu Fri Sat ");
......
动态规划--维基百科(2009-09-17 19:33:00)
摘要:
http://zh.wikipedia.org/wiki/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92
动态规划是一种在数学和计算机科学中使用的,用于求解包含重叠子问题的最优化问题的方法。其基本思想是,将原问题分解为相似的子问题,在求解的过程中通过子问题的解求出原问题的解。动态规划的思想是多种算法的基础,被广泛应用于计算机科学和工程领域。比较著名的应用实例有:求解最短路径问题,背包问题,项目管理,网络流优化等。
目录 [隐藏]
1 概述
2 步骤
3 实例
3.1 斐波那契数列
3.2 背包问题
4 使用动态规划的算法
5 外部链接
[编辑] 概述
动态规划在查找有很多重叠子问题的情况的最优解时有效。它将问题重新组合成子问题。为了避免多次解决这些子问题,它们的结果都逐渐被计算并被保存,从简单的问题直到整个问题都被解决。因此,动态规划保存递归时的结果,因而不会在解决同样的问题时花费时间。
动态规划只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能完全满足,故有时需要引入一定的近似)。简单地说,问题能够分解成子问题来解决。
[编辑] 步骤
最优子结构性质。如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质(即满足最优化原理)。最优子结构性质为动态规划算法解决问题提供了重要线索。
子问题重叠性质。子问题重叠性质是指在用递归算法自顶向下对问题进行求解时,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只计算一次,然后将其计算结果保存在一个表格中,当再次需要计算已经计算过的子问题时,只是在表格中简单地查看一下结果,从而获得较高的效率。
[编辑] 实例
[编辑] 斐波那契数列
计算斐波那契数列的一个最基础的算法是,直接按照定义计算:
function fib(n)
if n = 0 or n = 1
 ......
求数组的子数组的的元素之和的最大值3(2009-09-17 19:19:00)
摘要:
下面我们来分析一下最大子段和的子结构,令b[j]表示从a[0]~a[j]的最大子段和,b[j]的当前值只有两种情况,(1) 最大子段一直连续到a[j] (2) 以a[j]为起点的子段,不知有没有读者注意到还有一种情况,那就是最大字段没有包含a[j],如果没有包含a[j]的话,那么在算b[j]之前的时候我们已经算出来了,注意我们只是算到位置为j的地方,所以最大子断在a[j]后面的情况我们可以暂时不考虑。
由此我们得出b[j]的状态转移方程为:b[j]=max{b[j-1]+a[j],a[j]},
所求的最大子断和为max{b[j],0<=j<n}。进一步我们可以将b[]数组用一个变量代替。
得出的算法如下:
int maxSubArray(int n,int a[])
{
int b=0,sum=-10000000;
for(int i=0;i<n;i++)
{
if(b>0) b+=a[i];
else b=a[i];
if(b>sum) sum=b;
}
return sum;
&......
求数组的子数组的的元素之和的最大值2(2009-09-17 16:36:00)
摘要:
第二种方法-带记忆的递推法:
cumarr[0]=a[0]
for i=1 to n //首先生成一些部分和
{
cumarr[i]=cumarr[i-1]+a[i];
}
maxsofar=0
for i=0 to n
{
for j=i to n //下面通过已有的和递推
{
sum=cumarr[j]-cumarr[i-1]
if(sum>maxsofar)
maxsofar=sum
}
}
......
求数组的子数组的的元素之和的最大值(2009-09-17 15:22:00)
摘要:
给定一个长度为n的一维数组a,请找出此数组的一个子数组,使得此子数组的和sum=a[i]+a[i+1]+……+a[j]最大
//算法一:
#include<iostream>
using namespace std;
int main()
{
int a[10]={0};
int max=0,i=0,j,k,temp=0;
for(i=0;i<10;i++)
{
cin>>a[i];
}
max=a[0];
for(i=0;i<10;i++)
{
for(j=i;j<10;j++)
{
for(k=i;k<=j;k++)
temp+=a[k];
max=(max>temp? max:temp);
temp=0;
}
}
cout<<max<<endl;
return 0;
}......