有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

如果字符串中的所有“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”。这个代码有什么问题


共 (4) 个答案

  1. # 1 楼答案

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

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

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

  2. # 2 楼答案

    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;
    }
    
  3. # 3 楼答案

    为什么要从头到尾检查?这很难理解

    除了程序末尾的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");
    }
    
  4. # 4 楼答案

    声明:

    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++)