Java 在使用for循环和switch语句修改字符串后,返回字符串时遇到问题 公共静态字符串八进制等价(字符串二进制输入){ 字符串octalOutput=“”; for(int counter=binaryInput.length();counter
counter 2是否比binaryInput.length大?如果否,那么这就是答案。for循环永远不会被命中,所以字符串永远不会改变 另外,看起来您真正想要做的就是在0和3之间对binaryInput进行子串,这根本不需要for循环。请尝试类似的操作,也许:Java 在使用for循环和switch语句修改字符串后,返回字符串时遇到问题 公共静态字符串八进制等价(字符串二进制输入){ 字符串octalOutput=“”; for(int counter=binaryInput.length();counter,java,loops,switch-statement,Java,Loops,Switch Statement,counter 2是否比binaryInput.length大?如果否,那么这就是答案。for循环永远不会被命中,所以字符串永远不会改变 另外,看起来您真正想要做的就是在0和3之间对binaryInput进行子串,这根本不需要for循环。请尝试类似的操作,也许: public static String octalEquivalent(String binaryInput) { String octalOutput =" "; for(int counter=binaryI
public static String octalEquivalent(String binaryInput) {
String octalOutput =" ";
for(int counter=binaryInput.length(); counter<3; counter++)
{
binaryInput= "0"+binaryInput;
}
for(int counter=binaryInput.length(); counter%3==1; counter++)
{
binaryInput= "0"+binaryInput;
}
for (int counter1=0, counter2=3; counter2<=binaryInput.length(); counter1+= 3, counter2+=3)
{
String temp=binaryInput.substring(counter1,counter2);
switch (temp){
case "000": octalOutput = octalOutput+"0";
break;
case "001": octalOutput = octalOutput+"1";
break;
case "010": octalOutput = octalOutput+"2";
break;
case "011": octalOutput = octalOutput+"3";
break;
case "100": octalOutput = octalOutput+"4";
break;
case "101": octalOutput = octalOutput+"5";
break;
case "110": octalOutput = octalOutput+"6";
break;
case "111": octalOutput = octalOutput+"7";
break;
}
}
return(octalOutput);
}
除非我遗漏了什么,否则我建议将二进制输入转换为数字,然后将其转换为八进制
字符串
String temp="";
temp=binaryInput.substring(0,3);
switch (temp){
case "000": octalOutput = octalOutput+"0";
break;
case "001": octalOutput = octalOutput+"1";
break;
case "010": octalOutput = octalOutput+"2";
break;
case "011": octalOutput = octalOutput+"3";
break;
case "100": octalOutput = octalOutput+"4";
break;
case "101": octalOutput = octalOutput+"5";
break;
case "110": octalOutput = octalOutput+"6";
break;
case "111": octalOutput = octalOutput+"7";
break;
}
公共静态字符串八进制等价(字符串二进制输入){
字符串octalOutput=“”;
for(int counter=binaryInput.length();counter第二个for的用途是什么?Java 1.8是否允许String
作为switch
语句的参数?Java 1.8(或更早版本)向开关添加了字符串。我怀疑问题在于返回。很可能您不是因为其他问题而修改了octalOutput
。@erhun第二个for循环是让二进制数可以被3整除,这样我就可以在3中提取部分,在第三个for循环中将其转换为八进制。这不是答案,应该是commentExpanded在我的原始答案上。我觉得这足以让他朝着正确的方向前进。我明白你的意思@iByrd92。我修改了我的代码,但仍然没有得到正确的返回。我试图修改二进制数字的任何长度。这意味着我希望代码能够转换二进制数,如01101011011到八进制。这就是为什么我有for循环,这也是第三个循环之前的两个for循环的作用。它们在那里,所以我可以让二进制被3整除,这样第三个for循环就可以正常工作。@GraysonWood,你知道你也在重置for循环之间的长度变量吗?还有,在你的thi上对于循环,似乎计数器2比它好。原因是,如果它是一个像011011011这样的数字,那么它的长度不可能小于3,计数器2从3开始。
public static String octalEquivalent(String binaryInput) {
return Integer.toOctalString(Integer.parseInt(binaryInput, 2));
}
public static String octalEquivalent(String binaryInput) {
String octalOutput =" ";
for(int counter=binaryInput.length(); counter<3; counter++)
{
binaryInput= "0"+binaryInput;
}
while(binaryInput.length()%3 != 0)
{
binaryInput= "0"+binaryInput;
}
for (int counter1=0, counter2=3; counter2<=binaryInput.length(); counter1+= 3, counter2+=3)
{
String temp=binaryInput.substring(counter1,counter2);
switch (temp){
case "000": octalOutput = octalOutput+"0";
break;
case "001": octalOutput = octalOutput+"1";
break;
case "010": octalOutput = octalOutput+"2";
break;
case "011": octalOutput = octalOutput+"3";
break;
case "100": octalOutput = octalOutput+"4";
break;
case "101": octalOutput = octalOutput+"5";
break;
case "110": octalOutput = octalOutput+"6";
break;
case "111": octalOutput = octalOutput+"7";
break;
}
}
return(octalOutput);
}