我们会说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”。这段代码有什么问题?
答案 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;
}