伊莉討論區

標題: 問題求解兩題 [打印本頁]

作者: 復仇刺    時間: 2020-8-24 11:30 PM     標題: 問題求解兩題

本帖最後由 復仇刺 於 2020-8-26 10:13 PM 編輯

/**
* @(#)ArrayListTest.java
*
*
* @author
* @version 1.00 2020/8/17
*/
import java.io.*;
import java.util.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import java.text.ParseException;
import java.util.Arrays;

/*
題目:用BufferedReader寫一隻程式輸入任意數值,以空白或逗號為區隔,去除重複數值後印出去重後的數值並依大小排序

例如:

請輸入數值:01 02 03 04 05 06 07 08 09 100 100 200 200 300 300 400 500 500 400 600 700 800 800 1000 1000 1000 2000

輸出結果:01 02 03 04 05 06 07 08 09 100 200 300 400 500 600 700 800 1000 2000


*/

/*
   
   



*/
public class ArrayListTest
{

    public static void main (String[] args) throws IOException
     {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("請輸入數值");
        String text=br.readLine();
        String [] names=text.split("");
        int names1[]=new int[names.length];
        for(int i=1;i<names.length;i++)
        {

            names1=Integer.parseInt(names);
        
        }
        
        
        Set<Integer> intSet = new HashSet<Integer>();
        for (int element : names1)
        {
             intSet.add(element);
        }
        int nonDuplicateArray[] = new int[intSet.size()];
        Object[] tempArray = intSet.toArray();
        for (int i = 0; i < tempArray.length; i++)
        {
             nonDuplicateArray = (Integer) tempArray;
        }
        for (int element : nonDuplicateArray)
           {
             System.out.print(element + ", ");
        }
    }
}



作者: johnwanz    時間: 2020-8-25 09:36 AM

我測試後遇到的問題,
1. initial value, 請不要以0開頭. (好像是八進制的表達式, 像是09會造成異常)
2. 最終結果搬出的部分, 使用標準for(int i...), Array也要一個一個搬出. 沒有做索引.

測試環境: tutorialspoint / Java8
作者: johnwanz    時間: 2020-8-26 09:52 AM

  1. for (int i = 0; i < tempArray.length; i++)
  2. {
  3.     nonDuplicateArray = (Integer) tempArray;
  4. }
複製代碼
這個賦值的過程有問題, 你用index var i, 但是過程中沒有用到?
正常這個迴圈是, 一個一個把Array中的內容搬過去, 但你的CODE沒有喔.

一, 二題, 這邊都是
作者: 復仇刺    時間: 2020-8-26 11:25 PM

本帖最後由 復仇刺 於 2020-8-26 11:36 PM 編輯
johnwanz 發表於 2020-8-26 09:52 AM
這個賦值的過程有問題, 你用index var i, 但是過程中沒有用到?
正常這個迴圈是, 一個一個把Array中的內容搬 ...

public class ArrayListTest
{

    public static void main (String[] args) throws IOException
         {
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                System.out.print("請輸入數值:");
                String text=br.readLine();
                String [] names=text.split(" ");
                int names1[]=new int[names.length];
                for(int i=0;i<names.length;i++)
                {

                        names1=Integer.parseInt(names);
               
                }
               
               
                Set<Integer> intSet = new HashSet<Integer>();
                for (int element : names1)
                {
             intSet.add(element);
        }
        int nonDuplicateArray[] = new int[intSet.size()];
        Object[] tempArray = intSet.toArray();
        for (int i = 0; i < tempArray.length; i++)
        {
             nonDuplicateArray = (Integer) tempArray;
        }
        System.out.print("輸出:");
        for (int element : nonDuplicateArray)
               {
             System.out.print(element + ", ");
        }
    }
}
原來前方0是因為index var i的問題導致
感謝幫助 把i=1改掉 就不跑 0了
程式語言果真強大~.~...十天去重的功夫 一次就解決了~.~"


作者: johnwanz    時間: 2020-8-27 09:40 AM

我想, 我們講得不是一件事. 不過恭喜你解決了你的問題.

關於Array, 我講的是賦值方式.

你在迴圈中, 用的是,
array1 = array2;
這代表, 你讓array1參照為array2,
參照, 並不是複製一個Array, 而是指向同一個Array.

在迴圈中, 通常採用一次一個搬移的index索引方式進行複製.
複製的話, array1/array2是兩個Array, 只是有相同值.
使用索引, 做複製搬移, 應該是,
array1[index] = array2[index];

所以,
array1 = array2;
做了N次數, 實際上是重複在做同件事.
array1指向aray2. (同一個array)

在Java中, 可以用更方便的方式複製.
array1 = array2.clone();

你可以再試試看, 理解他的原理, 就能更清楚知道他在做什麼.

ps.
印象中, 參照為同一個Array, 可以用
TRUE == (array1 == array2)
如果是兩個Array, 相同值,
FALSE == (array1 == array2)




歡迎光臨 伊莉討論區 (http://a04.eyny.com/) Powered by Discuz!