Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > сортировка вставками с убыванием сумм элементов ма


Автор: ArniLand 14.10.2010, 16:43
Написал программу которая сортирует элементы массива с убыванием сумм элементов массива выдает ошибку при сравнение в этой суммы индексов
Код
if(symm(i)>symm(j)
 
- то есть не правильное преобразование типов как я понимаю, подскажите как это исправить
ошибка:
method symm in class laba13.Row cannot be applied to given types
  required: int[]
  found: int

Код программы:
Код
package laba13;
import java.io.*;
import java.lang.*;
public class Row {
    public static void InsertionSort(int[] array)
{
    int i;

    for (i = 1; i < array.length; i++)
    {
        int j;
        int buf = array[i];
        for (j = i - 1; j >= 0; j--)
        {
            if(symm(i)>symm(j))
                break;
            array[j + 1] = array[j];

        }

        array[j + 1] = buf;


    }
}
    
    public static int symm (int mass[]){
    int sum =0;
    for(int a=0;a<mass.length;a++)
     {

         sum= sum + mass[a];

    }
    System.out.println("symma chisel ravna: "+sum);
    return sum;
    }
    public static void main(String arg[])
    {
        char[] mass={'1','3','5','6','8'};
        int[] copymass=new int[mass.length];


for(int a=0;a<mass.length;a++)

{
    copymass[a]=Character.digit(mass[a], 10);
}
InsertionSort(copymass);
symm(copymass);
for(int b=0;b<copymass.length;b++)
{
    System.out.println("do->"+mass[b]+"\tposle->"+copymass[b]);
}
     }

}

Автор: Antropoid 14.10.2010, 17:12
Ты вот здесь вот
if(symm(i)>symm(j))
вызываешь метод с int'ами, а надо с массивами

Автор: ArniLand 14.10.2010, 17:27
if(symm(a[i])>symm(a[i])) так вызывать с массивами?

Автор: Antropoid 14.10.2010, 17:37
С массивами вызывать то так, но проверь имена переменных.

Автор: ArniLand 14.10.2010, 17:41
вызываю так, но все равно таже ошибка. Вод код сортировки вставками и суммы
  
Код

 public static void InsertionSort(int array[])
{
    int i;

    for (i = 1; i < array.length; i++)
    {
        int j;
        int buf = array[i];
        for (j = i - 1; j >= 0; j--)
        {
            if(symm(array[i])>symm(array[j]))//візов с помощью массивов
                break;
            array[j + 1] = array[j];

        }

        array[j + 1] = buf;


    }
}
public static int symm (int mass[]){
    int sum =0;
    for(int a=0;a<mass.length;a++)
     {

         sum= sum + mass[a];

    }
    System.out.println("symma chisel ravna: "+sum);
    return sum;
    }

Автор: Antropoid 14.10.2010, 18:05
Ой, сорри это я ошибся.
Вызов должен быть таким
symm(array) 
ты должен передавать весь массив, согласно сигнатуре твоего метода.

Автор: ArniLand 14.10.2010, 18:08
тогда не пойму, вызов я сделаю. Но для реализации убывания сумм элементов массива мне нужно сравнивать суммы индексов. А что тогда мне сравнивать я не пойму?

Автор: Antropoid 14.10.2010, 18:39
Так переделай метод, так чтобы он принимал что-то вроде этого
if (symm(array, i) > symm(array, j))

Автор: ArniLand 14.10.2010, 18:42
каким образом?

Автор: Antropoid 14.10.2010, 19:16
 
Код

public static int symm(int mass[], int i) {
    int sum = 0;
    for (int a = i; a < mass.length; a++) {

        sum = sum + mass[a];

    }
    System.out.println("symma chisel ravna: " + sum);
    return sum;
    }

Автор: nc30 16.10.2010, 06:20
Цитата(ArniLand @ 14.10.2010,  14:43)
Написал программу которая сортирует элементы массива с убыванием сумм элементов массива 
...
Код программы:
Код

//...
    public static void main(String arg[])
    {
        char[] mass={'1','3','5','6','8'};
        int[] copymass=new int[mass.length];

//...
}

Убывание сумм элементов массива предполагает, что он, как минимум, двумерный.
В вашем случае создается одномерный массив int. Его элементы - целые числа, а вычислять сумму одного числа - это курьез.

Приведенное вами условие
Код
if(symm(i)>symm(j))
 
корректно, если массив array является двумерным. В этом случае каждый его элемент является одномерным массивом и функция symm() вызывается с правильным аргументом.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)