Java 如何根据单词范围检查输入单词的位置?
如何检查输入单词是否位于给定单词范围的“前”、“内”或“后”?对于每个输入字,我们只需要在“之前”、“内部”或“之后”输出Java 如何根据单词范围检查输入单词的位置?,java,algorithm,data-structures,Java,Algorithm,Data Structures,如何检查输入单词是否位于给定单词范围的“前”、“内”或“后”?对于每个输入字,我们只需要在“之前”、“内部”或“之后”输出 要确定顺序,字符优先规则是:'a.length()) 返回-1; 如果(b.length()=startWord和queryWord,注意你假设startWord=sValue&&qValue public static int compare_str(String a, String b) { int len = Math.min(a.length(), b.le
要确定顺序,字符优先规则是:'<'A'<'A'<'B'<'B'..'Z'
Format of input is:
1) <start word> <end word>
2) A sequence of N words
输入格式为:
1)
2) N个单词的序列
例如:
Input:
============
Apple Pear
Aa
Aq
App
Apple
Output:
============
before // as Aa < Apple
inside // as Aq > Apple && Aq < Pear
before // as App < Apple
inside // as Apple == Apple && Apple < Pear
输入:
============
苹果梨
Aa
Aq
应用程序
苹果
输出:
============
之前//作为Aa<苹果
内部//作为Aq>苹果和Aq<梨
前//作为应用程序<苹果
内部//苹果==苹果和苹果<梨
下面是我得到的,但它给出了错误的输出,所以我的比较逻辑看起来是错误的
public static void main(String args[] ) throws Exception {
Scanner sc = new Scanner(System.in);
String startWord = sc.next(); // this will give "Apple"
String endWord = sc.next(); // this will give "Pear"
while (sc.hasNext()) {
// below will give "Aa", or "Aq", or "App" or "Apple" one by one
String queryWord = sc.next();
if(queryWord.compareTo(startWord) < 0 && queryWord.compareTo(endWord) < 0) {
System.out.println("before");
} else if(queryWord.compareTo(startWord) > 0 && queryWord.compareTo(endWord) > 0) {
System.out.println("after");
} else if(queryWord.compareTo(startWord) == 0 && queryWord.compareTo(endWord) == 0) {
System.out.println("inside");
}
}
sc.close();
}
Update:
publicstaticvoidmain(字符串args[])引发异常{
扫描仪sc=新的扫描仪(System.in);
字符串startWord=sc.next();//这将给出“Apple”
字符串endWord=sc.next();//这将给出“Pear”
while(sc.hasNext()){
//下面将逐一给出“Aa”或“Aq”或“App”或“Apple”
字符串queryWord=sc.next();
if(queryWord.compareTo(startWord)<0&&queryWord.compareTo(endWord)<0){
系统输出打印项次(“之前”);
}else如果(queryWord.compareTo(startWord)>0&&queryWord.compareTo(endWord)>0){
System.out.println(“之后”);
}else if(queryWord.compareTo(startWord)==0&&queryWord.compareTo(endWord)==0){
系统输出打印项次(“内部”);
}
}
sc.close();
}
更新:
那么逻辑会是这样吗
while (sc.hasNext()) {
String queryWord = sc.next();
int qValue = 0;
for(char c : queryWord.toCharArray()) {
qValue += map.get(c);
}
if(qValue > sValue && qValue < eValue) {
System.out.println("inside");
} else if(qValue > sValue && qValue > eValue) {
System.out.println("before");
} else {
System.out.println("after");
}
}
while(sc.hasNext()){
字符串queryWord=sc.next();
int qValue=0;
for(char c:queryWord.toCharArray()){
qValue+=map.get(c);
}
如果(qValue>sValue&&qValuesValue&&qValue>eValue){
系统输出打印项次(“之前”);
}否则{
System.out.println(“之后”);
}
}
在发布解决方案之前,让我们看看输入范围。
单词的每个字母都是[A,Z]或[A-Z]中的任何内容
下面是我想要使用的逻辑,以计算给定的输入是在
之前、内部
还是外部
1. Let's initialize two variables - startWord and endWord.
2. Take input for the above two variables.
3. Now, I create a map which stores value for each letter constant. As per the question, my values will look something like this:-
A - 1
a - 2
B - 3
b - 4
.
.
Z = 51
z = 52.
4. Now I will calculate value of each word, so for example, value of Apple will be = A+p+p+l+e = 1+32+32+24+10 = 99.
5. Similarly I will do for Pear.
6. Now for each user input value, for example Aa. I will make this calculation again, so for Aa its = A+a = 1+2 = 3. And 3 is less then 99.
7. Now it all comes to Maths, if this value is within the range of startWord and endWord, then I print inside, if its less then answer is before otherwise after.
希望这有帮助 让我们假设它是一条数字线,第一个字在X点,第二个字在y点 根据这个问题,我们需要声明输入的单词位于x之下,在x和y之间,或者在y之外
现在,问题来了,不同的词如何进行比较 看到上面的例子,我们可以得出结论,如果第一个字符串的任何字符大于另一个字符串相同位置的字符,那么我们可以说第一个字符串大于另一个字符串。 例如:
Input:
============
Apple Pear
Aa
Aq
App
Apple
Output:
============
before // as Aa < Apple
inside // as Aq > Apple && Aq < Pear
before // as App < Apple
inside // as Apple == Apple && Apple < Pear
Scanner sc=新扫描仪(System.in);
字符串startWord=sc.next();//这将给出“Apple”
字符串endWord=sc.next();//这将给出“Pear”
while(sc.hasNext()){
字符串queryWord=sc.next();
if(compare_str(queryWord,startWord)<0&&compare_str(queryWord,endWord)<0){
系统输出打印项次(“之前”);
}如果(比较字符(查询字,起始字)>0&&compare字符(查询字,结束字)>0){
System.out.println(“之后”);
}else if(compare_str(queryWord,startWord)>=0&&compare_str(queryWord,endWord)b.charAt(i)))
返回1;
其他的
返回-1;
}
如果(b.length()>a.length())
返回-1;
如果(b.length()
我希望这段代码有用。在发布解决方案之前,我有一个问题,输入数据将只包含从a到Z的大写字母和从a到Z的小写字母。是的,它将只包含这些字母。最后一次检查看起来是假的
compareTo
仅当它们相同时才应返回0。你必须检查它是否大于开始,小于结束。看看你的最后一个if:你想说queryWord>=startWord和queryWord,注意你假设startWordpublic static int compare_str(String a, String b) {
int len = Math.min(a.length(), b.length());
for (int i = 0; i < len; i++) {
if (a.charAt(i) == b.charAt(i))
continue;
if ((a.charAt(i) > b.charAt(i)))
return 1;
else
return -1;
}
if (b.length() > a.length())
return -1;
if (b.length() < a.length())
return 1;
return 0;
}