【问题标题】:How to sort array in a method如何在方法中对数组进行排序
【发布时间】:2014-05-26 19:19:50
【问题描述】:

大家好!

我的程序编译成功了……

问题出在方法total4上...当我在运行程序时在eclipse中进行编码时,它在名为total4的方法中出现了与“IF”一致的问题!

这是我的代码:

import java.util.Scanner;
public class Askisi1 {

    public static void main(String[] args) {
        Scanner ch=new Scanner(System.in);
        Scanner in = new Scanner(System.in);
        String[] onomata= new String[6];
        int[] pontoi1=new int[10];
        int[] pontoi2=new int[10];
        int[][] pontoi=new int [6][10];
        double[] taxinomisi=new double[6];

        int i,k;


            for (i=0; i<onomata.length; i++)
            {
                System.out.println("Parakalw doste to onoma tou"+" " +(i+1)+"ou"+" "+"paixti!");
                onomata[i] =  ch.nextLine();

            }

            for (i=0; i<=5; i++)
            {
                for (k=0; k<=9; k++)
                {
                    System.out.println("Parakalw doste tous pontous tou"+" " +(i+1)+"ou"+" "+"paixti ston"+" " +(k+1)+"o"+" "+"agwna!!");
                    pontoi[i][k]=in.nextInt();
                }
            }

            pontoi1=total1(pontoi);
            pontoi2=total2(pontoi);
            taxinomisi=total3(pontoi1);

            for (i=0; i<=5; i++)
            {
                System.out.println("Oi pontoi tou"+" "+(i+1)+"ou paixti einai"+" "+pontoi1[i]);
            }
            System.out.println(" ");
            for (i=0; i<=9; i++)
            {
                System.out.println("Oi pontoi tis omadas ston"+" "+(i+1)+"o agwna einai:"+" "+pontoi2[i]);
            }
            System.out.println(" ");

            for (i=0; i<=5; i++)
            {
                System.out.print(" "+total4(taxinomisi,onomata)+" ");
                System.out.println(onomata[i]);
            }


    }

        public static int[] total1 (int[][] array) {


                    int total=0;
                    int z=0; int j=0;
                    int[] a=new int[6];
                    for (z=0; z<=5; z++)
                    {
                        for (j=0; j<=9; j++)
                        {
                            total=total+array[z][j];
                        }
                        a[z]=total;
                        total=0;
                    }

                    return a;
                }

        public static int[] total2 (int[][] array) {
                    int total2 = 0; 
                    int z=0; int j=0; 
                    int[] b=new int[10];

                    do{

                    for (z=0; z<=5; z++)
                    {
                        total2=total2+array[z][j];

                    }
                    b[j]=total2;
                    total2=0;
                    j++;
                    }
                    while (j<=9);

                    return b;
                    }

        public static double[] total3 (int[] array){
            double mesos_oros=0.0;
            int z=0;
            double[] a=new double[6];
            for (z=0; z<=5; z++)
            {
                mesos_oros=array[z]/10;
                a[z]=mesos_oros;
                mesos_oros=0.0;
            }
            return a;

        }

        public static double[] total4 (double[] array,String[] array2){
            String y=" ";
            double x=0.0;
            double max=array[0];
            for (int i=0; i<=5; i++)
            {
                if (array[i+1]>max)
                {
                    array[i]=x;
                    array[i+1]=array[i];
                    array[i+1]=x;
                    array2[i]=y;
                    array2[i+1]=array2[i];
                    array2[i+1]=y;

                }
            }

            return array;
        }

}   

我只是想对数组进行排序,但我看不到任何错误...

提前致谢!!

【问题讨论】:

  • 预期结果是什么,具体有什么问题?
  • 告诉我们正在抛出什么异常,或者正在发生什么样的意外行为将有助于我们为您提供帮助。
  • if (array[i+1]&gt;max) 很可疑,Java 使用从零开始的数组索引。
  • 您需要阅读帮助中心,了解如何提问。你已经告诉我们你想要发生什么,但你还没有告诉我们实际发生了什么。
  • 实际发生了什么?当编译器进入名为total4的方法时,当它与“IF”一致时,它只是停止程序而不做任何其他事情......我想,它只是无法比较我的要求而我无法找到为什么...

标签: java arrays sorting methods


【解决方案1】:

问题在于if (array[i + 1] &gt; max),更具体地说是array[i+1]

您在此行拨打total4

System.out.print(" " + total4(taxinomisi, onomata) + " ");

所以传入的arraytaxinomisi

你在这里设置taxinomisitaxinomisi = total3(pontoi1);

total3 你返回:

double[] a = new double[6];
// stuff
return a;

因此,您将 taxinomisi(一个长度为 6 的数组)传递给 total4。现在让我们看看total4中的循环:

for (int i = 0; i <= 5; i++) {
    if (array[i + 1] > max) 

在这里我们可以看到,当i 为5 时,array[i+1] 将在数组中查找元素6。但是,Java 中的数组是从零开始的:它们从 0 开始。所以您实际上是在寻找数组中的第 7 个元素(如果我们从 1 开始)。但是,数组只有 6 个元素,导致 ArrayIndexOutOfBounds 异常。

事实上,错误信息告诉你:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
    at stuff.Stuff.total4(Stuff.java:106)
    at stuff.Stuff.main(Stuff.java:45)

Java Result: 1

【讨论】:

    猜你喜欢
    • 2020-01-15
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 2011-11-18
    • 2010-11-11
    • 2012-11-20
    相关资源
    最近更新 更多