【问题标题】:Wrong output when using if();{} in Java [closed]在 Java 中使用 if();{} 时输出错误 [关闭]
【发布时间】:2015-04-12 17:40:22
【问题描述】:

此代码的更正之处是什么?我无法获得正确的输出,我想按字母顺序对一些字符串进行排序。这个程序有什么问题?

import java.util.Scanner;

public class Alsort {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in=new Scanner(System.in);
        int i,j,n;
        p("enter the value of n =");
        n=in.nextInt();
        String name[]=new String[8];
        String tname[]=new String[8];
        String tmp;
        p("enter the value or names");
        for(i=0;i<n;i++)
        {
            name[i]=in.nextLine();
            tname[i]=name[i];
        }
        for(i=0;i<n-1;i++)
        {
            for(j=i+1;j<n;j++)
            {
                if(name[i].compareToIgnoreCase(name[j])>0);
                {
                tmp=name[i];
                name[i]=name[j];
                name[j]=tmp;      
                }
            }
        }
        p("\n---------------------------------\n");
        p("Input Names\tSorted Names");
        p("\n-----------------------------------\n");
        for(i=0;i<n;i++){
            p(tname[i]+"\t\t"+name[i]+"\n");
        }
    }

    static void p(Object anyObject){
        System.out.println(anyObject);
    }
}

【问题讨论】:

  • 你提供了什么输入,你期望的输出是什么,你得到的输出是什么?请通过编辑将此信息添加到您的问题中。

标签: java


【解决方案1】:

您必须删除最后一个“;”从这一行:

            if(name[i].compareToIgnoreCase(name[j])>0);

这是一个很常见的错误,基本上是 if 的主体是 ";"本身,即空指令,以及下面的块

            {
            tmp=name[i];
            name[i]=name[j];
            name[j]=tmp;      
            }

总是被执行。 如果你有一个带有自动格式化的 IDE,我的建议是广泛使用它,因为它有助于发现这种错误,这里是自动格式化后的样子:

    if (name[i].compareToIgnoreCase(name[j]) < 0)
      ;
    {
      tmp = name[i];
      name[i] = name[j];
      name[j] = tmp;
    }

如您所见,很容易发现错误。

【讨论】:

    【解决方案2】:

    你的代码有问题

    1. 下一个 int 不会消耗整行,因此您必须在 n=in.nextInt(); 之后执行 nextLine() 才能消耗整行。

    2. if(name[i].compareToIgnoreCase(name[j])&gt;0); 后面的分号会导致每次循环执行 if 之后的阻塞。

      如果两个数组 tname name 名称相同,为什么不使用长度 n 初始化它们

    所以代码是

     public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System. in );
        int i, j, n;
        p("enter the value of n =");
        n = in .nextInt(); in .nextLine();
        String name[] = new String[n];
        String tname[] = new String[n];
        String tmp;
        p("enter the value or names");
        for (i = 0; i < n; i++) {
            name[i] = in .nextLine();
            tname[i] = name[i];
        }
        for (i = 0; i < n - 1; i++) {
            for (j = i + 1; j < n; j++) {
                if (name[i].compareToIgnoreCase(name[j]) > 0) {
                    tmp = name[i];
                    name[i] = name[j];
                    name[j] = tmp;
                }
            }
        }
        p("\n---------------------------------\n");
        p("Input Names\tSorted Names");
        p("\n-----------------------------------\n");
    
        System.out.println(Arrays.toString(tname));
        System.out.println(Arrays.toString(name));
        for (i = 0; i < n; i++) {
            p(tname[i] + "\t\t" + name[i] + "\n");
        }
    
     }
    
    
     static void p(Object anyObject) {
        System.out.println(anyObject);
     }
    

    Demo

    【讨论】:

      【解决方案3】:

      更容易使用ArrayList + Collections.sort,像这样:

      List<String> list = new ArrayList();
      list.add("Dog");
      list.add("House");
      list.add("Cat");
      list.add("Go");
      list.add("Whoooo");
      

      然后,

      Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
      

      这会给你一个排序列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-17
        相关资源
        最近更新 更多