题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。
package mu.orderstr;
import java.util.ArrayList;
import java.util.List;
public class GetAll {
List list= new ArrayList();
public GetAll(){
list.add( "22");
}
public void AllOrder(String str){
List listlin= new ArrayList();
for( int i=0;i<list.size();i++){
String nstr=(String )list.get(i);
nstr=str+nstr;
String cmpstr=nstr;
listlin.add(nstr);
nstr=ChangeStr(nstr);
while(!cmpstr.equals(nstr)){
listlin.add(nstr);
nstr=ChangeStr(nstr);
}
}
list.clear();
list.addAll(listlin);
}
public void OutAll(){
//过虑
for( int j=0;j<list.size();j++){
String outstr=(String)list.get(j);
if((outstr.indexOf("3")+1==outstr.indexOf("5")) || (outstr.indexOf("3")-1==outstr.indexOf("5"))||(outstr.indexOf("4")==2))
continue;
System.out.println( "-----------"+outstr);
}
}
public String ChangeStr(String str){
char arr[]=str.toCharArray();
char first=arr[0];
str=str.substring(1,str.length())+first;
return str;
}
public static void main(String args[]){
GetAll getall= new GetAll();
getall.AllOrder( "1");
getall.AllOrder( "3");
getall.AllOrder( "4");
getall.AllOrder( "5");
getall.OutAll();
}
}
(2)
写一个方法,用
一个for循环打印九九乘法表
/**
* 打印九九乘法口诀表
*/
public void nineNineMulitTable(){
for ( int i = 1,j = 1; j <= 9; i++) {
System.out.print(i+ "*"+j+ "="+i*j+ " ");
if(i==j){
i=0;
j++;
System.out.println();
}
}
}
若可以用两个for,则也可以如下:
public void show()
{
for( int a=1;a<=9;a++)
{
for( int b=1;b<=a;b++)
{
System.out.print(b+ "*"+a+ "="+(b*a)+ " ");
if(a==b)
{
System.out.println("");
}
}
}
}
也可变相用while和a++,哈哈:
public void show()
{
for( int a=1;a<=9;a++)
{
int b=1;
while(b<=a)
{
System.out.print(b+ "*"+a+ "="+(b*a)+ " ");
b++;
}
System.out.println("");
}
}
输出如下:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
(3)
写一个方法,能够判断任意一个整数是否素数 :
素数:即只能被自己和1整除的数.如2,3等.1不是素数.
Math.sqrt(num):返回数的正平方根.
/**
* 判断任意一个整数是否素数
* @param num
* @return boolean
*/
public boolean isPrimeNumber( int num)
{
for ( int i = 2; i <= Math.sqrt(num); i++) {
if(num%i==0)
{
return false;
}
}
return true;
}
输出1-100的素数(math.sqrt()的方法:
import java.lang.Math;
public class SuShu{
public static void main(String[] args){
boolean flag=false;
for(int i=3;i<=100;i+=2)
{
flag=false;
for(int j=2;j<=Math.sqrt(i);j++)
{
if(i%j==0) flag=true;
}
if (!flag)
System.out.print(i+" ");
}
}
}
}
创建一个有5个值的数组,求最大值,最小值:
public class ShuZu{
public static void main(String[] args){
int temp=0;
int[] a={9,11,8,5,6};
for( int i=0;i<5;i++){ //先对数组排序
/*将第一位的数据与其它各数进行比较,把小的放到第一位.
* 这样,第一次循环后,第一位数,将是最小的;
* 然后进行第二次循环,结果把第二小的数放于第二位.
**/
for( int j=4;j>i;j--){
if(a[i]>a[j]){
temp=a[i];a[i]=a[j];a[j]=temp;
}
}
}
System.out.println( "max="+a[4]+ " min="+a[0]);
}
}
或用:
int temp=0;
int[] a={9,11,8,5,6};
for(int i=0;i<5;i++){//先对数组排序
/*将第一位的数据与其它各数进行比较,把小的放到第一位.
* 这样,第一次循环后,第一位数,将是最小的;
* 然后进行第二次循环,结果把第二小的数放于第二位.
**/
for(int j=i+1;j<5;j++){
// if(a[i]>a[j]){ //从小到大排序
if(a[i]<a[j]){ //从大到小排序
temp=a[i];a[i]=a[j];a[j]=temp;
}
}
}
(4)
写一个方法,输入任意一个整数,返回它的阶乘
**
*获得任意一个整数的阶乘
*@param n
*@returnn!
*/
public int factorial( int num)
{
//递归
if(num == 1)
{
return 1;
}
return num*factorial(num-1);
}
(5)
写一个方法,用二分查找法判断任意整数在任意整数数组里面是否存在,若存在就返回它在数组中的索引位置,不存在返回-1
/**
*二分查找特定整数在整型数组中的位置(递归)
*@param dataset
*@param data
*@param beginIndex
*@param endIndex
*@return index
*/
public int binarySearch( int[] dataset, int data, int beginIndex, int endIndex){
int midIndex = (beginIndex+endIndex)/2;
//如果查找的数要比开始索引的数据要小或者是比结束索引的书要大,或者开始查找的索引值大于结束的索引值返回-1没有查到
if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){
return -1;
}
if(data <dataset[midIndex]){
return binarySearch(dataset,data,beginIndex,midIndex-1);
} else if(data>dataset[midIndex])
{
return binarySearch(dataset,data,midIndex+1,endIndex);
} else {
return midIndex;
}
}
/**
*二分查找特定整数在整型数组中的位置(非递归)
*@param dataset
*@param data
*@return index
*/
public int binarySearch( int[] dataset , int data)
{
int beginIndex = 0;
int endIndex = dataset.length - 1;
int midIndex = -1;
if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){
return -1;
}
while(beginIndex <= endIndex) {
midIndex = (beginIndex+endIndex)/2;
if(data <dataset[midIndex]) {
endIndex = midIndex-1;
} else if(data>dataset[midIndex]) {
beginIndex = midIndex+1;
} else {
return midIndex;
}
}
return -1;
}
1.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
import java.util.*;
public class bycomma{
public static String[] splitStringByComma(String source){
if(source==null||source.trim().equals(""))
return null;
StringTokenizer commaToker = new StringTokenizer(source,",");
String[] result = new String[commaToker.countTokens()];
int i=0;
while(commaToker.hasMoreTokens()){
result[i] = commaToker.nextToken();
i++;
}
return result;
}
public static void main(String args[]){
String[] s = splitStringByComma("5,8,7,4,3,9,1");
int[] ii = new int[s.length];
for(int i = 0;i<s.length;i++){
ii[i] =Integer.parseInt(s[i]);
}
Arrays.sort(ii);
//asc
for(int i=0;i<s.length;i++){
System.out.println(ii[i]);
}
//desc
for(int i=(s.length-1);i>=0;i--){
System.out.println(ii[i]);
}
}
}
-------------------------------------------------------------------------------
2.产生9个大于1小于10的随机数,且放于数组中:
//Math.random()产生的随机数是大于0小于1,如:0.25994233953477175
int[] ii = new int[9];
for (int i = 0; i < ii.length; i++) {
ii[i] = (int)( 10*Math.random());
System.out.println(ii[i]);
}
-------------------------------------------------------------------------------
3.将一个形如:Stting="asdsdfsdfasdasda"这样的字符串,计算出这个字符串的同种字符的个数,以及有多少种不同的字符?
String s="asdsdfsdfasdasda";
//对字符串中的各字符的处理方式一:
// char [] b=s.toCharArray();
// for(int i=0;i<b.length;i++)
// {
// System.out.println("b:"+b[i]);
// }
int differentCount = 0;
//泛化只能用Character,不能用char
//用hashmap,来存放各种不同字符及其个数,也用于计算,累加字符的个数
Map<Character,Integer> map = new HashMap<Character,Integer>();
//对字符串中的各字符的处理方式二:
for(int i=0;i<s.length();i++){
Character c = new Character(s.charAt(i));
if(map.containsKey(c)){
//hashtable,hashmap, 如下:
// Hashtable ht=new Hashtable();
// ht.put("a",1);
// ht.put("a",2);
// System.out.println("ht:"+ht); //输出结果是ht:{a=2}
map.put(c, map.get(c).intValue()+1);
}else{
map.put(c, new Integer(1));
}
}
Iterator<Character> it = map.keySet().iterator();
while(it.hasNext()){
Character tmpc = it.next();
differentCount++;
System.out.println(tmpc+"="+map.get(tmpc));
}
System.out.println("differentCount="+differentCount);
-------------------------------------------------------------------------------
4.有一个String s="SDsBEaA"
要求产生这样的结果:s="AaBDESs"
public class MySort {
public static void main(String[] args) {
List<Character> result = new ArrayList<Character>();
String s = "SDsBEAa";
char[] strArray = s.toCharArray();
//排序后是:strArray = ABDESas
Arrays.sort(strArray);
for (int i = 97; i < 122; i++) {
char tempLowCase = (char) i;
char tempUpperCase = (char) (i - 32);
for (int j = 0; j < strArray.length; j++) {
if (Character.isUpperCase(strArray[j])) {
if (tempUpperCase == strArray[j]) {
result.add(tempUpperCase);
}
}
if (tempLowCase == strArray[j]) {
result.add(strArray[j]);
}
}
}
System.out.println(result);
}
}
-------------------------------------------------------------------
6.Java编程,打印昨天的当前时刻
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
-------------------------------------------------------------------
7.
JAVA多线程编程。用JAVA写一个多线程程序,如写四个线程,二个加1,二个对一个变量减一,输出。(须考虑同步)
//将要加减的变量设置为static;将加减操作及相应的变量定义在另一类中.在线程中进行调用即可.
//只要是多线程,就要考虑其同步.即要用synchrnized
class t
{
private static int x=10;
public synchronized void add()
{
x++;
System.out.println("x="+x);
}
public synchronized void jian()
{
x--;
System.out.println("x="+x);
}
}
class t1 extends Thread
{
public void run()
{
t t1=new t();
t1.add();
}
}
class t2 extends Thread
{
public void run()
{
t t1=new t();
t1.jian();
}
}
public class ThreadTest
{
public static void main(String [] args)
{
t1 t11=new t1();
t1 t12=new t1();
t2 t21=new t2();
t2 t22=new t2();
t11.start();
t12.start();
t21.start();
t22.start();
}
}
-------------------------------------------------------------------
8.金额转换,阿拉伯数字的金额转换成中国传统的形式如:
public class NumToChinese {
public static String NumberToChinese(String input){
String s1="零壹贰叁肆伍陆柒捌玖"; //设置对应关系。
String s4="分角整元拾佰仟万拾佰仟亿拾佰仟";
String temp="";
String result="";
if (input==null) return "输入的字串不是数字串只能包括以下字符('0'~'9','.'),
输入字串最大只能精确到仟亿,小数点只能两位!";
temp=input.trim();
float f;
try{
f=Float.parseFloat(temp);
}catch(Exception e){
return "输入的字串不是数字串只能包括以下字符('0'~'9','.'),输入字串最
大只能精确到仟亿,小数点只能两位!";
}
int len=0;
if(temp.indexOf(".")==-1) len=temp.length();
else len=temp.indexOf(".");
if(len>s4.length()-3) return("输入字串最大只能精确到仟亿,小数点只能两位!");
int n1=0;
String num="";
String unit="";
for(int i=0;i<temp.length();i++){
if(i>len+2){break;}
if(i==len) {continue;}
n1=Integer.parseInt(String.valueOf(temp.charAt(i)));
num=s1.substring(n1,n1+1);
n1=len-i+2;
unit=s4.substring(n1,n1+1);
result=result.concat(num).concat(unit);
}
if((len==temp.length())||(len==temp.length()-1)) result=result.concat("整");
if(len==temp.length()-2) result=result.concat("零分");
return result;
}
public static void main(String[] args) {
NumToChinese i=new NumToChinese();
System.out.println(i.NumberToChinese("1234.53"));
}
}
-------------------------------------------------------------------
9.杨辉三角:
/*杨辉三角最本质的特征是,它的两条斜边都是由数字1组成的,而其余的数则是等于它肩上的两个数之和。*/
int[][] sum = new int[10][10];
sum[0][0] = 1;
for (int i = 0; i < 10; i++) {
for (int j = 1; j <= i; j++) {
sum[i][j] = sum[i - 1][j - 1] + sum[i - 1][j];
System.out.print(sum[i][j] + "\t");
}
System.out.println();
}
}
-------------------------------------------------------------------
(10)
烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个
小时十五分钟呢?
1.三根绳子点燃,第1,2根点一头,第3根点两头
2.第3根燃尽的时候熄灭第1根
3.第2根燃尽时,将第一根两头点燃
4.第一根燃尽1小时15分计时结束