这是一个家庭作业,我必须从命令行比较两个字符串 参数,将它们转换为小写版本,执行 比较并打印出比其他字符串更小/更小的字符串 在字典顺序。字符串可以有任意长度。
但是,我的算法必须使用RECURSION。
我不确定是否1 - 我正在使用递归,或者2为什么它不适用于Hello和Hallo,但适用于Homework和homePhOne。
请帮助!!!
import java.util.Scanner;
public class MyStringCompare
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.println("Input String 1");
String x = in.next();
String xl = toLowerCase(x);
System.out.println("Input String 2");
String y = in.next();
String yl = toLowerCase(y);
char a = xl.charAt(0);
char b = yl.charAt(0);
int min = 0;
if (a < b)
{
System.out.println("The smallest string is " +xl);
}
if (a > b)
{
System.out.println("The smallest string is " +yl);
}
else if (a == b)
{
min = toCompare(xl,yl);
if (min == -1)
{
System.out.println("The smallest string is " +xl);
}
if (min == 1)
{
System.out.println("The smallest string is " +yl);
}
else if (min == 0)
{
System.out.println("Two strings are equal");
}
}
}
public static String toLowerCase( String s )
{
String output;
output = "";
int i;
char a;
char b;
for (i = 0; i<s.length(); i++)
{
a = s.charAt(i);
if (a >= 65 && a <= 90)
{
b = (char)( a+32);
output = output + b;
}
else
{
output = output + a;
}
}
return output;
}
public static int toCompare (String m, String n)
{
int i = 0;
int j = 0;
int min = 0;
for (i = 0; i< m.length(); i++)
{
for (j = 0; j < n.length(); j++)
{
char a = m.charAt(i);
char b = n.charAt(j);
if (a < b)
{
min = -1;
}
if (a > b)
{
min = 1;
}
else if (a == b)
{
min = 0;
}
}
}
return min;
}
}
答案 0 :(得分:0)
在类声明中定义一个静态布尔变量flag = false, 将所有字符串定义为静态全局变量,这样就不必使用它们将它们传递给递归方法。
从main调用compare(0) 使用这个递归过程:
private static void compare(int i)
{
if(x1.length()!=x2.length())
{
flag =false; return;
}
else
{
if((i<x1.length())&&(i<x2.length()))
{
if(x1.charAt(i)==x2.charAt(i))
{
i++;compare(i);flag =true;
}
else
flag =false; return;
}}
}
检查标志是否为true,以查看每个字符的字符串是否相等。 这是我使用递归的程序版本。
import java.util.*;
public class sol {
static String x1;
static String x2;
static boolean flag=false;
public static void main(String args[])
{
Scanner in = new Scanner(System.in);
x1= (in.nextLine());
x1=x1.toLowerCase();
x2= (in.nextLine());
x2=x2.toLowerCase();
compare(0);in.close();
if(flag==true)
System.out.print("Strings are equal");
else
System.out.print("Strings are not equal");
}
private static void compare(int i)
{
if(x1.length()!=x2.length())
{
flag =false; return;
}
else
{
if((i<x1.length())&&(i<x2.length()))
{
if(x1.charAt(i)==x2.charAt(i))
{
i++;compare(i);flag =true;
}
else
flag =false; return;
}}
}
}
答案 1 :(得分:0)
执行递归方法时:
研究您可能需要的参数:
-m:要比较的字符串
-n:要比较的字符串
您需要哪种基本情况? 这意味着,你的方法何时不再自称? 在这种情况下,当没有更多的字符需要比较时。
递归调用您的方法: 您调用方法从左到右进行比较。 例如:hello hallo
(1)compare hello hallo
(2)will call-> compare ello allo
(3)which will call-> compare llo llo
(4)which will call-> lo lo
(5)which will call-> o o
(6)which will call-> '' ''
which wont call more himself: no more characters left to be compared->basecase!
但收集返回的值,您将从右向左
(6)compare '' '' will return true
(5)compare 'o' 'o' will return (the result of 6)true && true ('o'=='o') ->true
(4)compare 'lo' 'lo' will return (5)true && true ('l'=='l') ->true
(3)compare 'llo' 'llo' will return (4)true && true ('l' == 'l') ->true
(2)compare 'ello' 'allo' will return (3)true && false ('e' != 'a') ->false
(1)compare 'hello' 'hallo' will return (2)false && true ('h' == 'h') ->false