我的代码对很多人来说可能是业余的,所以如果我的任何逻辑搞砸了,那没关系。我稍后会解决这个问题。只是想知道是否有人能让我知道为什么我的else语句会出现:“线程中的异常”主“java.lang.Error:未解决的编译问题:令牌上的语法错误”else“,删除此令牌”
我在这里阅读了一些其他问题,通常问题是人们正在检查条件(否则(blah< bleh){)与else,但我没有这样做。
import java.util.Scanner;
public class minOfThree {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner kb = new Scanner (System.in);
int num1, num2, num3, num4, min = 0;
System.out.println ("Please enter three numbers.");
System.out.print ("First value: ");
num1=kb.nextInt();
System.out.print ("Second value: ");
num2=kb.nextInt();
System.out.print ("Third value: ");
num3=kb.nextInt();
System.out.print ("Fourth value: ");
num4=kb.nextInt();
if (num1 < num2)
if (num1 < num3)
min=num1;
else
min=num3;
else if (num2 < num3)
min=num2;
else
min = num3;
***else*** {
min = num4;
}
System.out.println ("Minimum value is: " + min);
}
}
答案 0 :(得分:8)
如果您正确使用{
和}
,则可以避免这种情况:
if(num1 < num2) //"if" for if-else #1
{
if(num1 < num3) //"if" for if-else #2
{
min=num1;
}
else //"else" for if-else #2
{
min=num3;
} //complete end of if-else #2
}
else if(num2 < num3) //"else if" for if-else #1
{
min=num2;
}
else //"else" for if-else #1
{
min = num3;
} //complete end of if-else #1
else //"else" for nonexistent if-else == error
{
min = num4;
}
在这里,您可以看到在一个if-else语句中有两个else
。
要修复它,请使用以下内容:
min = Integer.MAX_VALUE; //minimum = maximum possible
if(num1 < min) //if num1 is less than current minimum...
{
min = num1; //current minimum = num1
}
if(num2 < min) //if num2 is less than current minimum...
{
min = num2; //current minimum = num2
}
if(num3 < min) //if num3 is less than current minimum...
{
min = num3; //current minimum = num3
}
if(num4 < min) //if num4 is less than current minimum...
{
min = num4; //current minimum = num4
}
答案 1 :(得分:7)
每个if / else if只能有一个。 else if (num2 < num3)
部分已在其下方两行显示else
语句。也许你错过了某个地方的if语句?
答案 2 :(得分:3)
如果是我,我会使用大括号继续前进; - )
if () {
// hack
} else if () {
// hack hack
} else {
// hack hack
}
但是,你使用的逻辑也是错误的,你可以用
代替你的最后一个if (min > num4) {
min = num4;
}
答案 3 :(得分:3)
养成总是在括号内写if-else语句的习惯,然后你永远不会想知道哪个语句与哪个测试有关。我相信以下是您希望代码看起来像:
if (num1 < num2) {
if (num1 < num3) {
min = num1;
} else {
min = num3;
}
} else {
if (num2 < num3) {
min = num2;
} else {
min = num3;
}
} else {
min = num4;
}
虽然这没有充分意义,因为在这里你也会得到两个else
。
答案 4 :(得分:3)
这是因为else if
没有创建新的if / else分支。这是编译器如何解释它的正确缩进。
if (num1 < num2)
if (num1 < num3)
min=num1;
else
min=num3;
else if (num2 < num3)
min=num2;
else
min = num3;
else
min = num4;
如您所见,这不是您的意图。因此,由于只允许一个else
语句,因此不会编译。如前所述,您应该使用大括号。
答案 5 :(得分:2)
据我所知,如果你没有在范围内写多行(即if-else语句),则不需要{}
。
if (num1 < num2) //1st If Start
if (num1 < num3) //2nd If Start
min=num1;
else
min=num3; //2nd If Ends
else if (num2 < num3) //3rd If starts in else part of 1st If
min=num2;
else
min = num3; //3rd If Ends
***else*** { //This else part is not followed by any If Statement (Causes Error )
min = num4;
}
在这种情况下,你的方法是正确的,但你错过了最后一个的起点。
希望它会对你有所帮助。
答案 6 :(得分:2)
你的逻辑是业余的,但没关系?您正在使用两个Else语句。这是没有意义的。并且你没有包含例程的括号,这真的令人困惑。你甚至想做什么?你想找到最小的数字吗?试试这个?
public static void main(String[] args){
int num1 = 4;
int num2 = 2;
int num3 = 3;
int num4 = 10;
int array[] = {num1, num2, num3, num4};
for (int i = 0; i < array.length; i++)
{
for (int j = 0; j < array.length-1; j++)
{
if (array[j] > array [j+1])
{
int x = array[j];
array[j] = array [j+1];
array [j+1] = x;
}
}
}
for (int i = 0; i < array.length; i++)
{
System.out.println(array[i]);
}
}
答案 7 :(得分:1)
在这种情况下是的,因为没有第二个else子句的意义。它将是无法访问的代码
答案 8 :(得分:1)
查看第一个if语句。你没有把你所做的大括号和其他错误。比如把两个else语句放到一个if语句中。
import java.util.Scanner;
public class StackOver {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner kb = new Scanner (System.in);
int num1, num2, num3, num4, min = 0;
System.out.println ("Please enter three numbers.");
System.out.print ("First value: ");
num1=kb.nextInt();
System.out.print ("Second value: ");
num2=kb.nextInt();
System.out.print ("Third value: ");
num3=kb.nextInt();
System.out.print ("Fourth value: ");
num4=kb.nextInt();
if (num1 < num2){
if (num1 < num3)
min=num1;
else
min=num3;
}else if (num2 < num3)
min=num2;
else if(num4 < num3)
min = num4;
else
min = num3;
System.out.println ("Minimum value is: " + min);
}
}