为什么它不适用于“不xy平衡”?

时间:2015-10-27 13:45:30

标签: java

我们会说String是xy平衡的,如果对于字符串中的所有'x'字符,字符串后面的某个地方都存在'y'字符。所以“xxy”是平衡的,但“xyx”不是。一个'y'可以平衡多个'x'。给定一个字符串str,如果给定的字符串是xy-balanced,则打印“xy balanced”,否则打印“not xy balanced”。

public static void main(String[] args) 
{
    Scanner scan = new Scanner(System.in);

    String str = scan.next();
    int x = str.length();
    boolean xyBalanced = false;

    for(int i = x - 1; i >= 0; i--)
    {
        char y = str.charAt(i);

        if(y == 'y')
            xyBalanced = true;

        else if(y == 'x')
            xyBalanced = false;

        else
            xyBalanced = true;
    }

    if(xyBalanced = true)
        System.out.print("xy balanced");

    else if(xyBalanced = false)
        System.out.print("not xy balanced");
}

当我输入aabbx时,它给了我“xy balanced”,实际上它应该给出“not xy balanced”。这段代码有什么问题?

4 个答案:

答案 0 :(得分:1)

为什么要从字符串的末尾开始检查?这很难理解。

除了您在程序结束时遇到的if / else问题,您可以将其更改为以下内容,我的程序在更正之后仍然无法正常工作。

System.out.print(xyBalanced ? "xy balanced" : "not xy balanced");

检查是否总有一个' y'在' x'的右侧,你可以使用以下循环 - 基本上,' x'总是将xyBalanced标志设置为false,并且' y'总是把它设置为真。

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);

    String str = scan.next();
    int length = str.length();
    boolean xyBalanced = true;

    for (int i = 0; i < length; ++i) {
        if (str.charAt(i) == 'x') {
            xyBalanced = false;
        } else if (str.charAt(i) == 'y') {
            xyBalanced = true;
        }
    }

    System.out.print(xyBalanced ? "xy balanced" : "not xy balanced");
}

答案 1 :(得分:0)

声明:

if(xyBalanced = true)

是赋值运算符,它应该使用==运算符:

if(xyBalanced == true){
    System.out.print("xy balanced");
} else {
    System.out.print("not xy balanced");
}

因为它是一个布尔值,你也可以说:

System.out.print( (!xyBalanced? "not" : "") + "xy balanced");

但是,从您的逻辑来看,您似乎也可以说

boolean xyBalanced = str.lastIndexOf('x') < (str.length()-1);

因为您正在考虑非x /非y字符。

所以你真的可以将所有代码简化为两行。

您的循环也存在问题。你实际上是从右到左。这是故意的吗?

for(int i = x - 1; i >= 0; i--)

似乎应该是:

for (int i=0;i<x;i++)

答案 2 :(得分:0)

您可以执行以下操作来识别平衡字符串

Sector            industry                   
Basic Industries  Agricultural Chemicals         17
                  Aluminum                        3
                  Containers/Packaging            1
                  Electric Utilities: Central     2
                  Engineering & Construction     12
Name: Symbol, dtype: int64

indexOf函数始终返回第一次出现的字符串。我们可以检查x的最后一个索引是否小于y的第一个索引,变量'xyBalanced'将相应地变为true或false。

答案 3 :(得分:0)

public boolean xyBalance(String str) {
if(str.endsWith("x")){
System.out.println("false");
return false;
}
if(str.endsWith("y")){ 
System.out.println("true");
return true;
}
if(str.lastIndexOf("x")>str.lastIndexOf("y")) {
System.out.println("false");
return false;
}
System.out.println("true");
return true;
}