簡體   English   中英

Int 數組自行排序

[英]Int array sorting itself

import java.util.ArrayList;

public class Paaohjelma {
    public static int pienin(int[] taulukko) {
        int temp, size;
        size = taulukko.length;

        for(int i = 0; i<size; i++ ){
            for(int j = i+1; j<size; j++){
                if(taulukko[i]>taulukko[j]){
                    temp = taulukko[i];
                    taulukko[i] = taulukko[j];
                    taulukko[j] = temp;
                }
            }
        }
        return taulukko[0];
    }
    
    public static int pienimmanIndeksi(int[] taulukko) {
        ArrayList<Integer> tauli = new ArrayList<>();
        
        for (int i : taulukko) {
            tauli.add(i);
        }
        
        return tauli.indexOf(Paaohjelma.pienin(taulukko));
    }
    
    public static int pienimmanIndeksiAlkaen(int[] taulukko, int aloitusIndeksi) {
        // this methods should get the index of smallest value starting from specified index
        int[] tempTauli = taulukko;
        tempTauli = new int[tempTauli.length - aloitusIndeksi];
        
        // this gets the right values to temporary array
        if (aloitusIndeksi > 0) {
            int index = 0;
            int indexTauli = 0;
            for(int value : taulukko) {
                if(index >= aloitusIndeksi) {
                    tempTauli[indexTauli] = taulukko[index];
                    indexTauli++;
                }
                index++;
            }
        }
        // values added are automatically sorted from smallest to largest?
        // this shouldn't be, array should be 5, 99, 3, 12 but is shown as 3, 5, 12, 99
        for(int inty : tempTauli) {
            System.out.println(inty);
        }
        
        // get the index of smallest value in array
        // index is 0 should be 2
        int index = Paaohjelma.pienimmanIndeksi(tempTauli);
        
        // return index of smallest value (add starting index to get the index of smallest value in the original array when starting from specified index)
        return index+aloitusIndeksi;
    }
    
    public static void main(String[] args) {
        // test code
        int[] taulukko = {3, 1, 5, 99, 3, 12};
        int minIndex = Paaohjelma.pienimmanIndeksi(taulukko);
        System.out.println("Pienin: " + Paaohjelma.pienin(taulukko));
        System.out.println("Pienimmän indeksi: " + minIndex);
        System.out.println(Paaohjelma.pienimmanIndeksiAlkaen(taulukko, 2));
    }

}

你好。 我正在為學校做一些編程課程工作,並且在這個特定部分停留了幾個小時。 所以我決定最好讓其他人看看並提供一些說明為什么我解決這個問題的方法不起作用。

應該發生什么:class 方法 PienimmanIndeksiAlkaen 應該從指定索引開始返回提供的 int 數組中最小值的索引。

我一直遇到的主要問題是數組似乎是自動排序的,我不知道是什么原因造成的。 我已經評論了代碼的相關部分,如果有人能解釋為什么會發生這種情況以及可以采取哪些措施來防止這種情況發生,我將非常高興。

您的數組排序的原因是您調用

    System.out.println("Pienin: " + Paaohjelma.pienin(taulukko));

你對數組進行排序。

當你把數組傳給這個function時,你實際上傳遞的不是數組的值,而是指向數組的指針——memory中數組的地址。這就是按值傳參和按引用傳參的區別。

在此處輸入圖像描述

您如何知道值是按值傳遞還是按引用傳遞? 根據經驗:

原始值——即 int、double 等將按值傳遞——它們的值將被復制並傳遞給 function。

任何其他類型,即 arrays 和類,將通過引用傳遞 - memory 中值的地址將傳遞給 function,因此當 function 結束時,對 function 中值的任何更改都會影響它。

在這里閱讀更多

import java.util.ArrayList;

public class Paaohjelma {
    public static int pienin(int[] taulukko) {
        int temp, size;
        size = taulukko.length;

        for(int i = 0; i<size; i++ ){
            for(int j = i+1; j<size; j++){
                if(taulukko[i]>taulukko[j]){
                    temp = taulukko[i];
                    taulukko[i] = taulukko[j];
                    taulukko[j] = temp;
                }
            }
        }
        return taulukko[0];
    }
    
    public static int pienimmanIndeksi(int[] taulukko) {
        ArrayList<Integer> tauli = new ArrayList<>();
        
        for (int i : taulukko) {
            tauli.add(i);
        }
        
        return tauli.indexOf(Paaohjelma.pienin(taulukko));
    }
    
    public static int pienimmanIndeksiAlkaen(int[] taulukko, int aloitusIndeksi) {
        // this methods should get the index of smallest value starting from specified index
        int[] tempTauli = taulukko;
        tempTauli = new int[tempTauli.length - aloitusIndeksi];
        
        // this gets the right values to temporary array
        if (aloitusIndeksi > 0) {
            int index = 0;
            int indexTauli = 0;
            for(int value : taulukko) {
                if(index >= aloitusIndeksi) {
                    tempTauli[indexTauli] = taulukko[index];
                    indexTauli++;
                }
                index++;
            }
        }
        // values added are automatically sorted from smallest to largest?
        // this shouldn't be, array should be 5, 99, 3, 12 but is shown as 3, 5, 12, 99
        for(int inty : tempTauli) {
            System.out.println(inty);
        }
        
        // get the index of smallest value in array
        // index is 0 should be 2
        int index = Paaohjelma.pienimmanIndeksi(tempTauli);
        
        // return index of smallest value (add starting index to get the index of smallest value in the original array when starting from specified index)
        return index+aloitusIndeksi;
    }
    
    public static void main(String[] args) {
        // test code
        int[] taulukko = {3, 1, 5, 99, 3, 12};
        int minIndex = Paaohjelma.pienimmanIndeksi(taulukko);
        System.out.println("Pienin: " + Paaohjelma.pienin(taulukko));
        System.out.println("Pienimmän indeksi: " + minIndex);
        System.out.println(Paaohjelma.pienimmanIndeksiAlkaen(taulukko, 2));
    }

}

你好。 我正在為學校做一些編程課程的工作,並且已經在這個特定的部分停留了幾個小時。 所以我決定最好讓其他人看看並提供一些說明為什么我的解決這個問題的方法不起作用。

應該發生什么: class 方法 PienimmanIndeksiAlkaen 應該從指定的索引開始返回提供的 int 數組中最小值的索引。

我遇到的主要問題是數組似乎會自動排序,我不知道是什么原因造成的。 我已經評論了代碼的相關部分,如果有人能解釋為什么會發生這種情況以及可以采取哪些措施來防止這種情況發生,我會非常高興。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM