Java 为什么不是';它不是为“工作”吗;“xy不平衡”吗;?

Java 为什么不是';它不是为“工作”吗;“xy不平衡”吗;?,java,Java,如果字符串中的所有“x”字符后面都有一个“y”字符,那么我们就说字符串是xy平衡的。所以“xxy”是平衡的,但“xyx”不是。一个“y”可以平衡多个“x”。给定字符串str,如果给定字符串为xy平衡,则打印“xy平衡”,否则打印“非xy平衡” public static void main(String[] args) { Scanner scan = new Scanner(System.in); String str = scan.next(); int x =

如果字符串中的所有“x”字符后面都有一个“y”字符,那么我们就说字符串是xy平衡的。所以“xxy”是平衡的,但“xyx”不是。一个“y”可以平衡多个“x”。给定字符串str,如果给定字符串为xy平衡,则打印“xy平衡”,否则打印“非xy平衡”

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平衡”,而实际上它应该给“not xy balanced”。此代码有什么问题?

声明:

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);
看起来应该是:

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

for(int i=0;i为什么要从字符串的末尾检查到开头?这很难理解

除了程序末尾的if/else问题(您可以更改为下面的问题),在我更正后,您的程序仍然无法运行

System.out.print(xyBalanced ? "xy balanced" : "not xy balanced");
要检查“x”的右侧是否始终有一个“y”,可以使用以下循环-基本上,“x”始终将xyBalanced标志设置为false,“y”始终将其设置为true

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");
}
publicstaticvoidmain(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
String str=scan.next();
int length=str.length();
布尔值=true;
对于(int i=0;i
您可以执行以下操作来识别平衡字符串

boolean xyBalanced = inputString.lastIndexOf('x') < inputString.indexOf('y');
boolean xyBalanced=inputString.lastIndexOf('x')

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

如果(xyBalanced=true)
可能应该是
如果(xyBalanced==true)
或者更好:
如果(xyBalanced)
。与else if相同。
xxy
如何平衡?有两个
x
(s),只有一个
y
。此外,如果您的逻辑正确,那么它可能只是
返回str.lastIndexOf('y')>str.lastIndexOf('x');
@ElliottFrisch我想您是指str.lastIndexOf('x')<(str length()-1)问题是,只要y字符位于y字符的左侧,只有一个y就足以平衡x字符的数量。你应该在回答中添加一个解释。
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;
}
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;
}