Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何根据单词范围检查输入单词的位置?_Java_Algorithm_Data Structures - Fatal编程技术网

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
  • Aa<苹果-因为'Aa'中的第二个'A'将位于'p'中的第二个'p'之下 数字行中的“苹果”
  • Aq>苹果-因为Aq中的第二个“q”将位于中的第二个“p”之后 数字行中的“苹果”
  • App<苹果-因为“App”等于“Apple”中的“App”,但它有 在“App”之后再添加2个字符“le”

    公共静态void main(字符串参数[]){

    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,注意你假设startWord=sValue&&qValue
    public 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;
    }