不含0的字符串,将相邻数字相加的和为n的数字打印出来
列如:str="1223456789" n=5
123
23
5Class.forName的作用是什么 为什么要用多线程有几种实现方式 JAVA类任何保证线程安全 ThreadLocal的用法以及适用场景写一个冒泡排序的程序 写一个其他排序方法的思想及特点
列如:str="1223456789" n=5
123
23
5Class.forName的作用是什么 为什么要用多线程有几种实现方式 JAVA类任何保证线程安全 ThreadLocal的用法以及适用场景写一个冒泡排序的程序 写一个其他排序方法的思想及特点
列如:str="1223456789" n=5
123 123好象不相邻 和也不是5吧
谈下思路,两层循环,外层,从第1位数字开始(用i标记),内层从i后一位数字开始(用j标记,初始j=i+1)相邻数字的和为s(每一次进入内循环置为s=a[i]):s=s+a[j];用临时变量空间来存储从a[i]开始的数字
1.如果s<5,则将a[j]放入临时变量空间,j++继续,
2.如果s>=5,则跳出内循环
3.如果s=5,则输出这个临时空间里的数字,否者不输出,然后清空该临时变量空间。
Java线程有两种方式
如何保证线程安全的:同步与锁机制
java如何保证线程安全的:1.同步与锁机制;2.互斥信号量
ThreadLocal是thread local variable(线程局部变量)。线程局部变量(ThreadLocal)其实的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。从线程的角度看,就好像每一个线程都完全拥有该变量。ThreadLocal就从另一个角度来解决多线程的并发访问,ThreadLocal会为每一个线程维护一个和该线程绑定的变量的副本,从而隔离了多个线程的数据,每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。ThreadLocal提供了线程安全的共享对象,在编写多线程代码时,可以把不安全的整个变量封装进ThreadLocal,或者把该对象的特定于线程的状态封装进ThreadLocal。所以,如果你需要进行多个线程之间进行通信,则使用同步机制;如果需要隔离多个线程之间的共享冲突,可以使用ThreadLocal,这将极大地简化你的程序,使程序更加易读、简洁。
{
public static void getNFromStr(String str, int n)
{
byte b[] = str.getBytes();
int bLen = b.length;
for (int i = 0; i < bLen - 1; i++)
{
int idigit = b[i] - 48; // ascii码转成对应的数字
if (idigit == n)
System.out.println(idigit);
for (int j = 0; j < bLen; j++)
{
int jdigit = b[j] - 48; // ascii码转成对应的数字
if ((idigit + jdigit) == n && j == i + 1)
System.out.println(idigit + "" + jdigit);
}
}
} public static void main(String[] args)
{
String str = "1223256143";
int n = 5;
getNFromStr(str, n);
}
}
运行结果如下:
23
32
5
14
public class WriterExam
{
public static void getNFromStr(String str, int n)
{
byte b[] = str.getBytes();
int bLen = b.length;
for (int i = 0; i < bLen - 1; i++)
{
int idigit = b[i] - 48; // ascii码转成对应的数字
if (idigit == n)
{
System.out.println(idigit);
continue;
}
int jdit[] = new int[bLen - i - 1]; // 动态分配数组
int temp = idigit;
for (int j = i + 1, k = 0; j < bLen; j++, k++)
{
int jdigit = b[j] - 48; // ascii码转成对应的数字
jdit[k] = jdigit;
temp = temp + jdigit;
if (temp == n)
{
System.out.print(idigit);
int x = 0;
while (x <= k)
System.out.print(jdit[x++]);
System.out.println();
}
}
}
} public static void main(String[] args)
{
String str = "1223256143";
int n = 5;
getNFromStr(str, n);
}
}
public class Test
{
public static void main(String[] args)
{
String s="122345678";
int n=5;
for(int i=0;i<s.length();i++){
int temp=Integer.parseInt(String.valueOf(s.substring(i, i+1)));
if(temp>n){
continue;
}
if(temp==n){
System.out.println(n);
}
for(int j=i+1;j<s.length();j++){
temp+=Integer.parseInt(String.valueOf(s.substring(j, j+1)));
if(temp>n){
break;
}
if(temp==n){
for(int k=i;k<=j;k++){
System.out.print(s.substring(k, k+1));
}
System.out.println();
}
}
}
}
}LZ看看这个
String str="1223456789";
int n=5;
int a[]=new int[30];
for(int i=0;i<str.length();i++){
int j=Integer.parseInt(Character.toString(str.charAt(i)));
a[i]=j;
}
for(int i=0;i<str.length();i++){
if(a[i]==n)
System.out.println(a[i]);
else if(a[i]<n){
int j=i,temp=i;
int k=a[i];
StringBuffer sb=new StringBuffer();
while(k<=n){
if(k==n){
sb.append(String.valueOf(a[j]));
System.out.println(sb.toString());
}
if(j==str.length()-1)
break;
k=k+a[++j];
sb.append(String.valueOf(a[temp++]));
}
}
else
continue;
}
}
}
subString本来返回的就是字符串,就不用String.valueOf了吧?下面也是一样的。我把程序想复杂了 楼主还是参考12楼和13楼的吧
{
public static void main(String[] args)
{
String s="122345678";
int n=5;
for(int i=0;i<s.length();i++){
int temp=Integer.parseInt(String.valueOf(s.substring(i, i+1)));
if(temp>n){
continue;
}
if(temp==n){
System.out.println(n);
}
for(int j=i+1;j<s.length();j++){
temp+=Integer.parseInt(String.valueOf(s.substring(j, j+1)));
if(temp>n){
break;
}
if(temp==n){
for(int k=i;k<=j;k++){
System.out.print(s.substring(k, k+1));
}
System.out.println();
}
}
}
}
}LZ看看这个