1.求解两个输入正整数的最大公约数。
public class GreatestCommonDivisor
{
public int getnum(int a,int b)
{
.....
}
}1。从命令行读入一个以逗号隔开数字序列,对其排序并按照降序排列输出
public class NumberInputSort{
public String sortNumberInput(String input)
{
......
}
}
2.从命令行读入一个字符串和一个文件名,输出文件中字符串存在与否,如果存在那么输出出现的次数
public class FindString
{
public boolean isStringExist(String filePath,String stringToFind)
{
...
}
public int existCount(String filePath,String stringToFind)
{
......
}
3.给定一个字符串,求这个字符串中的从左边开始的第一个最长的子串,这个子串必须在该字符串的逆串中也被包含。
如:"XBCDEFYWFEDCBZ" 中包含"BCDEF"子串,而其逆串”ZBCDEFWYFEDCBX"中同样包含这个子串。
Returns :"BCDEF"
public class ReverseSubstring
{
public string findReversed(String input)
{
.....
}
}谢谢!!!
public class GreatestCommonDivisor
{
public int getnum(int a,int b)
{
.....
}
}1。从命令行读入一个以逗号隔开数字序列,对其排序并按照降序排列输出
public class NumberInputSort{
public String sortNumberInput(String input)
{
......
}
}
2.从命令行读入一个字符串和一个文件名,输出文件中字符串存在与否,如果存在那么输出出现的次数
public class FindString
{
public boolean isStringExist(String filePath,String stringToFind)
{
...
}
public int existCount(String filePath,String stringToFind)
{
......
}
3.给定一个字符串,求这个字符串中的从左边开始的第一个最长的子串,这个子串必须在该字符串的逆串中也被包含。
如:"XBCDEFYWFEDCBZ" 中包含"BCDEF"子串,而其逆串”ZBCDEFWYFEDCBX"中同样包含这个子串。
Returns :"BCDEF"
public class ReverseSubstring
{
public string findReversed(String input)
{
.....
}
}谢谢!!!
解决方案 »
- java学生管理从数据库读数据问题求解
- java socket 怎么连接代理服务器(需验证)
- 几个实战+理论性的问题,请高手解惑
- 使用JBuilder 编译java 怎么给args传值?
- 在JAVA中一个文件中为什么只有一个PUBLIC类?
- 新的环境变量问题
- private好像也不安全啊
- sqlserver里面有没有象access那样的自动编号的字段啊 ,怎么设置呢 ??
- 今天心血来潮想学好Java,哥们儿们,小弟想挺点中肯的意见!
- java程序在eclipse中调试好了,打成jar包后和eclipse中运行的不一样
- 有關井字過三關3x3 & 井字過四關4x4
- 请教类和对象的问题(100分求教)
public class GreatestCommonDivisor{
public int getnum(int a,int b){
if(b==0){
return a;
}else{
return getnum(a,a%b);
}
}
//测试部分,输入15,45结果是15
public static void main(String[] args){
int aInt;
aInt=new GreatestCommonDivisor().getnum(15,45);
System.out.println("aInt="+aInt);
}
}
import java.io.*;
class GreatestCommonDivisor
{
public int getcd(int a,int b)
{
int i,j;
j=(a>b)?b:a;
for(i=j;i>0;i--)
if(a%i==0&&b%i==0)
return i;// 缺少返回语句。
}
public static void main(String args[])
{
try
{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String str=new String();
String str1=new String();
System.out.println("Enter two numbers:");
str=br.readLine();
str1=br.readLine();
int m=Integer.parseInt(str);
int n=Integer.parseInt(str1);
GreatestCommonDivisor cd=new GreatestCommonDivisor();
int e=cd.getcd(m,n);
System.out.println("The Greatest Common Divisor is: "+e);
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
import java.util.ArrayList;
public class NumberInputSort{
public String sortNumberInput(String input){
System.out.println("get: "+input);
String[] numList=input.split(","); //将接收参数转成String[];
StringBuffer bf=new StringBuffer();
int[] intNumList=new int[numList.length]; //同样大小的int[];
for(int i=0;i<intNumList.length;i++){
intNumList[i]=Integer.parseInt(numList[i]);
}
Arrays.sort(intNumList); //让Sun的那些老家伙去排序吧.
String[] outList=new String[intNumList.length];
int j=0;
for(int i=intNumList.length-1;i>=0;i--){
outList[j]=intNumList[i]+",";
bf.append(outList[j]);
j++;
}
return bf.toString();
}
public static void main(String[] args){
String argString="";
if(args.length==0){
System.out.print("java sortNumberInput xx,xx,xx, xx must be a number!");
System.exit(0);
}
StringBuffer tmp=new StringBuffer();
for(int i=0;i<args.length;i++){
tmp.append(args[i]);
}
argString=tmp.toString(); String a=new NumberInputSort().sortNumberInput(argString);
System.out.println("return: "+a);
}
}
这是我做的第一题,编译出错,缺少返回语句,大家看是哪里有错:
int i,j;
j=(a>b)?b:a;
for(i=j;i>0;i--)
if(a%i==0&&b%i==0)
return i;// 缺少返回语句。
--------------------------------你的return i是属于if(){}块中的, 整个public int getcd(int a,int b){}块缺少一个return int
public class GreatestCommonDivisor{
public int getnum(int a,int b){
if(b==0){
return a;
}else{
return getnum(a,a%b);
}
}这个好像有问题, a=3,b=2 就会死循环。 感觉getnum(b,a%b)可以。
public class GreatestCommonDivisor{
public int getnum(int a,int b){
if(b==0){
return a;
}else{
return getnum(a,a%b);
}
}输入45,15,结果。
public class GreatestCommonDivisor{
public int getnum(int a,int b){
if(b==0){
return a;
}else{
return getnum(a,a%b);
}
}
----------------------------
修改下
public int getnum(int a, int b) {
int min=a;
int max=b;
if(a>b){
min=b;
max=a;
}
if (min== 0) {
return max;
}
else {
return getnum(min, max%min);
}
}
这是我做的第一题,编译出错,缺少返回语句,大家看是哪里有错:
import java.io.*;
class GreatestCommonDivisor
{
public int getcd(int a,int b)
{
int i,j;
j=(a>b)?b:a;
for(i=j;i>0;i--)
if(a%i==0&&b%i==0)
return i;// 缺少返回语句。
}
改成下面这样就行了
int getcd(int a,int b)
{
int i;
i=(a>b)?b:a;
for(;i>0;i--)
if(a%i==0&&b%i==0)
break;
return i;
}
public class GreatestCommonDivisor
{
public int getnum(int a,int b)
{
int max = a>b?b:a;
int result = 1;
for(int i=1;i<max;i++)
{
if((a%i==0)&&(b%i==0))
{
result = i;
}
}
return result;
}
}
//1。从命令行读入一个以逗号隔开数字序列,对其排序并按照降序排列输出
public class NumberInputSort{
public String sortNumberInput(String input)
{
String [] tmp = input.split(",");
float [] tmp2 = new float[tmp.length];
String result = "";
for(int i=0;i<tmp.length;i++)
{
tmp2[i] = Float.parseFloat(tmp[i]);
}
java.util.Arrays.sort(tmp2);
for(int j=0;j<tmp2.length;j++)
{
result = result + tmp2[j]+",";
}
return result.substring(0,result.length());
}
}
//2.从命令行读入一个字符串和一个文件名,输出文件中字符串存在与否,如果存在那么输出出现的次数
public class FindString
{
public boolean isStringExist(String filePath,String stringToFind) throws IOException
{
File a = new File(filePath);
FileReader rd = new FileReader(a);
BufferedReader brd = new BufferedReader(rd);
String line = "";
while((line = brd.readLine())!= null)
{
if((line.indexOf(stringToFind)>=0)&&(line.indexOf(stringToFind)<=line.length()))
{
return true;
}
}
return false;
}
public int existCount(String filePath,String stringToFind) throws IOException
{
File a = new File(filePath);
FileReader rd = new FileReader(a);
BufferedReader brd = new BufferedReader(rd);
String line = "";
int count = 0;
while((line = brd.readLine())!= null)
{
if((line.indexOf(stringToFind)>=0)&&(line.indexOf(stringToFind)<=line.length()))
{
count++;
}
}
return count;
}
}
// 3.给定一个字符串,求这个字符串中的从左边开始的第一个最长的子串,这个子串必须在该字符串的逆串中也被包含。
// 如:"XBCDEFYWFEDCBZ" 中包含"BCDEF"子串,而其逆串”ZBCDEFWYFEDCBX"中同样包含这个子串。
// Returns :"BCDEF"
public class ReverseSubstring
{
public String findReversed(String input)
{
char [] seq = input.toCharArray();
char [] inversseq = new char[seq.length];
String inverseInput = "";
int lenth = 0;
String result= "";
for(int i=0;i<inversseq.length;i++)
{
inversseq[i]= seq[inversseq.length-1-i];
}
inverseInput = String.valueOf(inversseq);
for(int i=0;i<input.length();i++)
{
for(int j=i+1;j<input.length();j++)
{
CharSequence tmp = input.substring(i,j);
if( (input.contains(tmp))&&(inverseInput.contains(tmp)))
{
if(tmp.length()>lenth)
{
lenth = tmp.length();
result = tmp.toString();
}
}
}
}
return result;
}
}好久没做过这种操作基本数据的题了,以前c数据结构的时候经常写,呵呵
//2.从命令行读入一个字符串和一个文件名,输出文件中字符串存在与否,如果存在那么输出出现的次数
import java.io.*;
public class FindString
{
public boolean isStringExist(String filePath,String stringToFind) throws IOException
{
File a = new File(filePath);
FileReader rd = new FileReader(a);
BufferedReader brd = new BufferedReader(rd);
String line = "";
while((line = brd.readLine())!= null)
{
if((line.indexOf(stringToFind)>=0)&&(line.indexOf(stringToFind)<=line.length()))
{
return true;
}
}
return false;
}
public int existCount(String filePath,String stringToFind) throws IOException
{
File a = new File(filePath);
FileReader rd = new FileReader(a);
BufferedReader brd = new BufferedReader(rd);
String line = "";
int count = 0;
while((line = brd.readLine())!= null)
{
if((line.indexOf(stringToFind)>=0)&&(line.indexOf(stringToFind)<=line.length()))
{
count++;
}
}
return count;
}
public static void main(String args[])
{
try
{FindString fs=new FindString();
int n=fs.existCount(args[0],args[1]);
boolean b=fs.isStringExist(args[0],args[1]);
System.out.println(b);
System.out.println(n);
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
E:\JAVA>java FindString c:\\abc.txt abc
false
0
我建的abc.txt文件内容是:abcdefghijklmnabcdefghijklmnabcdefghijklmn,我输入 abc不应该是false和0呀。
int Divor(int a,int b)//a>=b;
{
if(b==1) return a;
return (b,a%b);
}//这是时间复杂度最小的算法;
int b=Integer.parseInt(args.length);
我的这两行怎么会报错了啊 大家看下呀
if((line.indexOf(stringToFind)>=0)&&(line.indexOf(stringToFind)<=line.length()))
{
count++;
}
这句话存在漏计
即使一行有多个stringToFind的话
你这样算也累加了一个
if(b==0){
return a;
}else{
return getnum(b,a%b);
}
}
楼上写的很清楚了,所以我就照搬过来了.呵呵
第二题,很简单,我是用正则写的,没必要写得和楼上那样
public static boolean isStringExist(String filePath,String stringToFind){
return existCount( filePath, stringToFind)>0;
}
public static int existCount(String filePath,String stringToFind){
int i = 0 ;
String needToMatch = "\\Q"+filePath+"\\E";
Pattern p = Pattern.compile(needToMatch);
Matcher matcher = p.matcher(stringToFind);
while(matcher.find()){
i++;
}
return i;
}
第三题 这个可能复杂点,本来也想用正则的,但是实在不知道怎么写,所以用了split拼,唯一麻烦的是,我的数据最终结果采用Map存储<key,value>对应了<length,value> ,所以会出现长度相同的字符会最终替换为最后一个,当然,我是觉得这个题目本身就有漏洞,如果连续的字符串同时出现最大,比如出现两个5长度的字符的话,也没给处理思路,其实也可以把Map改成<key,value>对应了<value,length> ,那样获得的结果更好,但我觉得没那必要,所以就没处理了.
public static String findReversed(String input) {
if(input==null)
return null ;
Object[] a = input.split("");
Object[] a1 = new Object[a.length-1];
int j = 0;
for(int i = 1;i<a.length;i++){
a1[j++] = a[i];
}
List b = Arrays.asList(a1.clone());
Collections.reverse(b);
Object[] c = new Object[a1.length];
for(int i =0 ;i<a1.length;i++){
if(a1[i].equals(b.get(i))){
c[i] = a1[i];
}
}
String result = "";
Map<Integer,String> resultMap = new HashMap();
for(int i = 0;i<a1.length;i++){
if(c[i]!=null){
result+=c[i];
}else{
if(result.length()>0){
resultMap.put(result.length(),result);
result = "";
}
}
}
return resultMap.get(Collections.max(resultMap.keySet()));
}
最后,发个广告~~呵呵。。小弟最近想换工作了,,有没公司愿意要,工资要求不高
5.5 北京就行。。
而后来BusyCai()的方法也存在问题。
我来写一个
//求最大公约数
public class GreatestCommonDivisor{
/**
* 输入两个整数,求最大公约数
* @param a
* @param b
* @return 最大公约数
*/
public static int getNum(int a,int b){
int max, min;
//取a,b中最大的数
if(a >= b){
max = a;
min = b;
}else{
max = b;
min = a;
}
//如果最大数和最小数取模,值为0,则最大公约数为为最小数
if(max % min == 0)
return min;
//如果最小数为1,则最大公约数为1,否则递归
if(min == 1)
return min;
else
return getNum(max, max % min);
}
}
一行只计算了一次
int count=0;
try {
File f = new File(filePath);
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
String str = "";
while((str = br.readLine())!=null) {
int length=str.length();
while(length>=beFindedString.length()) {
int i = 0;
if(str.substring(i,beFindedString.length()).equals(beFindedString)) {
count++;
}
i += 1;
length-=1;
}
}
} catch(IOException e) {
e.printStackTrace();
}
return count;
}
怎么我这样子算出的不对啊
大家过来看看这个方法有什么错误
应该
int length = str.length();
//要查找的字符串的长度
int length2 = beFindedString.length();
int i = 0;
while(length >= length2){
if(str.substring(i, length2).equals(beFindedString)) {
count++;
str = str.substring(i + length2, length);
length = str.length();
i = 0;
continue;
}
i ++;
}
第三道可以使用回溯法解决:/**
*
*/
package test.bit.jdc.algorithm;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;/**
*3.给定一个字符串,求这个字符串中的从左边开始的第一个最长的子串,这个子串必须在该字符串的逆串中也被包含。
*如:"XBCDEFYWFEDCBZ" 中包含"BCDEF"子串,而其逆串”ZBCDEFWYFEDCBX"中同样包含这个子串。
*Returns :"BCDEF"
*
*/
public class ReverseWord { public static void main( String[] args ) throws IOException{
//input data
String line;
//char array for data and inverse data.
char[] cs ;
char[] ics;
//string length.
int length;
//max subString length;
int max = 0;
//max Sub String.
String maxSub = null;
//temporary varable.
int i,j,start;
//do real work in follow.
//step one: read string form terminal.
InputStreamReader isr = new InputStreamReader( System.in );
BufferedReader bir = new BufferedReader( isr );
line = bir.readLine();
length = line.length();
cs = line.toCharArray();
ics = new char[cs.length]; //step two: inverse the character array.
for( i = 0; i<length; i++){
ics[i] = cs[length-1-i];
}
//steop three: find the max subString.
String iline = new String( ics );
for( i = 0 ; i<length; i++){
start = -1;
start = iline.indexOf( cs[i], start+1 );
for( ; start != -1;start = iline.indexOf( cs[i], start+1 ) ){
for( j=0;i+j < length && start + j < length && cs[i+j] == ics[start+j];j++ );
if( j > max ) {
max = j;
maxSub = line.substring( i, i + j );
}
}
}
System.out.println( "the Max = " + max + " and MaxSubString = " + maxSub );
}
}
overgame(我菜我存在) 的第二题,想到用正则表达式,不错,但是他的方法写错了,两个对象的顺序都搞错了,而且只是把filePath当作字符串进行匹配的,而不是把filePath下的文件拿来做,等有时间我来写一个
public static int getnum(int a,int b){
if(b==0){
return a;
}else{
return getnum(b,a%b);
}
}已经完全可以完成楼主的要求,做max和min的判断完全多余~我们来做个判断,如果a>b ,那实际和你做的一样
如果a<b 因为a%b取余 后边的return 实际上已经把a,b互换了,所以实际比较大小是完全多余的
至于第二题.sorry。没仔细看题目,不过把对比的源头换成该文件下的所有字符就是,我觉得不是很难.
package test;/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: </p>
* @author :jeafyezheng 血浪骑兵
* @version 1.0
*/public class FindsubString {
public String sub(String s )
{
char str[] = s.toCharArray();
int len = str.length;
for(int sublen = len; sublen > 0; sublen--)
{
for(int start = 0; (len - start) >= sublen ; start++)
{
if(judge(str, start, sublen))
{
System.out.println("start = " + start + " len = " + sublen);
return new String(str, start, sublen );
}
}
}
return "";
} private boolean judge(char[] str, int start, int sublen) {
for(int end = str.length ; end > sublen; end --)
{
int j = 1;
for (int i = start; i < start + sublen; i++, j++)
{
if(str[i] != str[end - j])
{
break;
}
}
j--;
if(j == sublen )
{
return true;
}
}
return false;
} public static void main(String[] args) {
FindsubString fs = new FindsubString();
System.out.println("sub= " + fs.sub("ksABCddcCBA"));
}
}
int len = 0;
ArrayList lList = new ArrayList();
Map lMap = new HashMap();
String lStr = null;
for (int i = 0; i < inStr.length()-1; i++) {
for (int j = i + 2; j < inStr.length(); j++) {
lStr = inStr.substring(i, j);
lList.add(lStr);
}
}
char[] ch = new char[inStr.length()];
for (int i = 0; i < inStr.length(); i++) {
ch [i] = inStr.charAt(i);
}
String lStr2 = "";
lStr = null;
for (int i = inStr.length()-1; i > 0; i--) {
lStr2 = lStr2 + ch [i];
}
for (int i = 0; i < lStr2.length()-1; i++) {
for (int j = i + 2; j < lStr2.length(); j++) {
lStr = lStr2.substring(i, j);
lMap.put(lStr, lStr);
}
}
for (int i = 0; i < lList.size(); i++) {
if (lList.get(i).equals(lMap.get(lList.get(i)))) {
lStr = (String) lList.get(i);
if (len < lStr.length()) {
len = lStr.length();
res = lStr;
}
}
}
return res;
}