Java實現動態輸入一組數,存到數組裡面
阿新 • • 發佈:2020-12-27
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
/**
* @author jadexu
* @// TODO: 2020/12/26
* 動態輸入一組數,存到數組裡面
* (以下使用了try-catch異常處理,目的在於方便動態輸入一組資料時跳出輸入,
* 只要輸入的資料不是double及以下資料型別,就跳出迴圈,程式結束)
*/
static Scanner sc = new Scanner(System.in);
private static void fun1() {
/*
方法1:陣列
思路:
既然要動態輸入一組數,那麼至少有一位數,所以先接收一個數,並賦給陣列arr1,
每接收一個數,就new一個新的陣列,長度是舊陣列的長度再加1,
依次複製舊的陣列的值,且將新接收的數放在末尾,
再將整個陣列賦值給舊的陣列,舊的陣列就指向新的陣列的地址值
*/
double[] arr1 = {sc.nextDouble()};
double[] newArr = {};
while (sc.hasNextDouble()){
try{
double num = sc.nextDouble();
newArr = new double[arr1.length+1];
newArr[newArr.length-1] = num;
for (int j = 0; j < arr1.length; j++ ) {
newArr[j] = arr1[j];
}
arr1 = newArr;
}catch (Exception e){
break;
}
}
//輸出
for (double num:arr1) {
System.out.print(num+"\t");
}
}
private static void fun2() {
/*
方法2:Arrays陣列工具類
思路:
使用Arrays.copyOf()方法,將舊資料賦值給陣列,
且長度依次+1,末尾新增新接收的數,
省略了需要用兩個陣列往復新建賦值的操作
*/
double[] arr2 = {};
while (sc.hasNextDouble()){
try{
double num = sc.nextDouble();
arr2 = Arrays.copyOf(arr2,arr2.length+1);
arr2[arr2.length-1] = num;
}catch (Exception e){
break;
}
}
System.out.println(Arrays.toString(arr2));
}
private static void fun3() {
/*
方法3:String類
思路:
將所有接收的數依次用,拼接成一個字串,
使用String.spilt(pattern)方法,將字串按照逗號分隔成一個字串陣列,
迴圈每個切割後的字串,型別轉換成double,賦值給double陣列
*/
String str = "";
while (sc.hasNextDouble()){
double num;
try{
num = sc.nextDouble();
}catch (Exception e){
break;
}
str += num+",";
}
String[] strArr = str.split(",");
double[] arr3 = new double[strArr.length];
for (int i = 0; i < arr3.length; i++) {
arr3[i] = Double.parseDouble(strArr[i]);
}
System.out.println(Arrays.toString(arr3));
}
private static void fun4() {
/*
方法4:泛型集合
*/
ArrayList<Double> arr4 = new ArrayList<>();
while (sc.hasNext()){
try{
double num = sc.nextDouble();
arr4.add(num);
}catch (Exception e){
break;
}
}
System.out.println(arr4);
}
}
方法1:
方法2:
方法3:
方法4: