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


Автор: ArniLand 26.9.2010, 16:51
написал программу по следующему заданию - создайте одномерный массив строк str [N], где каждая строка состоит из цифровых символов. Выполните сортировку строк по убыванию сумм элементов строки алгоритмом вставки. 
1. При выводе строки где считается сумма элементов массива char, выводиться странная сумма со значением 100. Как это исправить, ведь должно считаться количество элементов строки.
2. Правильно я реализовал сортировку вставками согласно заданию?

Код программы
Код
package laba13;


public class Row {

    private char str[];
    private int nElems;
    
    public Row(int max){
        str = new char[max];
        nElems = 0;
    }
    
    public void insert(char value){
        str[nElems] = value;
        nElems++; 
    }
    public void out(){
        for(int h = 0; h < nElems; h++) {
            System.out.print(str[h] + "");
            System.out.println("");
        }
    }
    public int summary() {
        this.str = str;
        int sum = str.length;
        System.out.println("Сумма элементов строки" + sum);
        return sum;
    }
  
    

      public void insertionSort(){
        int k, j;
        char newValue;
        for (k = 1; k < nElems; k++) {
            newValue = str[k];
            j = k;
            while (j > 0 && str[j + 1] > newValue){
                str[j] = str[j +  1];
                j--;
        }
        str[j] = newValue;
    }
    }

    public static void main(String[] args) {
      int maxSize = 100;
      Row array;
      array = new Row(maxSize);

      array.insert('7');
      array.insert('6');
      array.insert('2');
      array.insert('4');
      array.insert('5');

      array.out();

      array.summary();

      array.insertionSort();

      array.out();
      }
}

Автор: syblog 26.9.2010, 16:52
Да вроде все ок

Автор: ArniLand 26.9.2010, 17:31
С суммой мне не нравиться, у меня количество элементов 5, а выводит 100

Автор: Connie 27.9.2010, 09:55
Код

import java.util.*;

public class Main {
    private Vector<NumString> arr = new Vector<NumString>();
    /**
     * @param args the command line arguments
     */
    public Main(){
        arr.add(new NumString("12345"));
        arr.add(new NumString("23456"));
        arr.add(new NumString("34567"));
        arr.add(new NumString("411011"));

        Collections.sort(arr, new Comparator<NumString>(){
            public int compare(NumString a, NumString b){
                return a.getWeight() - b.getWeight();
            }
            });
        for(NumString it:arr){
             System.out.println(it.toString());
        }
    }
    public static void main(String[] args) {
        // TODO code application logic here
        new Main();
    }
}


Код

public class NumString {
    private String vl;
    public NumString(String st){
        vl = st;
    }
    public int getWeight(){
        int sum = 0;
        for(int i=0;i<vl.length();i++){
            sum += Integer.valueOf(""+vl.charAt(i));
        }
        return sum;
    }
    @Override
    public String toString(){
        return vl;
    }
}

Только сортировку я сделал "по ленивому"

Автор: ArniLand 27.9.2010, 10:28
коллекции мне использовать нельзя

Автор: Connie 27.9.2010, 14:00
ArniLand, не используй smile Но мне то можно ;) Я написал класс, который реализует строку, которая, в свою очередь, дает знать о сумме своих символов, как я понял в этом была загвоздка.

А как хранить этот класс (NumString) дело десятое smile 

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