2011-12-01 26 views
21

Tôi phải nhập chuỗi có số cũ: 1,2,3,4,5. Đó là một mẫu của đầu vào, sau đó tôi phải đặt nó trong một mảng INT vì vậy tôi có thể sắp xếp nó nhưng không hoạt động theo cách nó hoạt động.Tách chuỗi và đặt nó vào mảng int

package array; 

import java.util.Scanner; 

public class Array { 

    public static void main(String[] args) { 
     String input; 
     int length, count, size; 
     Scanner keyboard = new Scanner(System.in); 
     input = keyboard.next(); 
     length = input.length(); 
     size = length/2; 
     int intarray[] = new int[size]; 
     String strarray[] = new String[size]; 
     strarray = input.split(","); 

     for (count = 0; count < intarray.length ; count++) { 
      intarray[count] = Integer.parseInt(strarray[count]); 
     } 

     for (int s : intarray) { 
      System.out.println(s); 
     } 
    } 
} 
+0

"không hoạt động theo cách thức hoạt động" theo cách nào? lỗi? không hoạt động khi đối mặt với các yếu tố đầu vào xấu? s luôn luôn trống? –

+3

'strArr = input.split (',')' sau đó chỉ cần sao chép strArr vào một intArr – Enrique

Trả lời

46

Đối với đầu vào 1,2,3,4,5 đầu vào là chiều dài 9. 9/2 = 4 toán số nguyên, vì vậy bạn chỉ lưu trữ bốn biến đầu tiên, không phải tất cả 5.

Thậm chí nếu bạn cố định đó, nó sẽ phá vỡ khủng khiếp nếu bạn thông qua tại một đầu vào của 10,11,12,13

Nó sẽ làm việc (một cách tình cờ) nếu bạn sử dụng 1,2,3,4,50 cho một đầu vào, lạ đủ :-)

bạn sẽ được tốt hơn off làm cái gì đó như này

String[] strArray = input.split(","); 
int[] intArray = new int[strArray.length]; 
for(int i = 0; i < strArray.length; i++) { 
    intArray[i] = Integer.parseInt(strArray[i]); 
} 

Để tham khảo trong tương lai, khi bạn gặp lỗi, tôi khuyên bạn nên đăng nó bằng mã. Bạn có thể không có ai đó có sẵn jdk để biên dịch mã để gỡ lỗi! :)

0

Bạn đang thực hiện phân chia Integer, do đó bạn sẽ mất độ dài chính xác nếu người dùng xảy ra để đặt vào số lượng đầu vào lẻ ​​- đó là một vấn đề mà tôi nhận thấy. Bởi vì điều này, khi tôi chạy mã với đầu vào là '1,2,3,4,5,6,7' giá trị cuối cùng của tôi bị bỏ qua ...

1

Hãy xem xét rằng bạn có đầu vào là "1, 2,3,4 ".

Điều đó có nghĩa là chiều dài của đầu vào là 7. Vì vậy, bây giờ bạn viết kích thước = 7/2 = 3,5. Nhưng kích thước là int, nó sẽ được làm tròn thành 3. Tóm lại, bạn đang mất 1 giá trị.

Nếu bạn viết lại đoạn code như bên dưới nó nên làm việc:

String input; 
int length, count, size; 
Scanner keyboard = new Scanner(System.in); 
input = keyboard.next(); 
length = input.length(); 

String strarray[] = input.split(","); 
int intarray[] = new int[strarray.length]; 

for (count = 0; count < intarray.length ; count++) { 
    intarray[count] = Integer.parseInt(strarray[count]); 
} 

for (int s : intarray) { 
    System.out.println(s); 
} 
1
String input = "2,1,3,4,5,10,100"; 
String[] strings = input.split(","); 
int[] numbers = new int[strings.length]; 
for (int i = 0; i < numbers.length; i++) 
{ 
    numbers[i] = Integer.parseInt(strings[i]); 
} 
Arrays.sort(numbers); 

System.out.println(Arrays.toString(numbers)); 
+0

Tôi khuyên bạn nên sử dụng nó thay thế: số [i] = Integer.parseInt (chuỗi [i] .trim()) nếu không, nếu chuỗi là "4,22,42" nó sẽ ném một ngoại lệ. –

0

Thay đổi thứ tự mà bạn đang làm mọi thứ chỉ là một chút. Bạn dường như được chia cho 2 không có lý do cụ thể nào cả.

Trong khi ứng dụng của bạn không đảm bảo một chuỗi đầu vào của biến ruột phân nửa bạn có thể dễ dàng làm cho nó làm như vậy:

package com; 

import java.util.Scanner; 

public class Test { 
    public static void main(String[] args) { 
     // Good practice to initialize before use 
     Scanner keyboard = new Scanner(System.in); 
     String input = ""; 
     // it's also a good idea to prompt the user as to what is going on 
     keyboardScanner : for (;;) { 
      input = keyboard.next(); 
      if (input.indexOf(",") >= 0) { // Realistically we would want to use a regex to ensure [0-9],...etc groupings 
       break keyboardScanner; // break out of the loop 
      } else { 
       keyboard = new Scanner(System.in); 
       continue keyboardScanner; // recreate the scanner in the event we have to start over, just some cleanup 
      } 
     } 

     String strarray[] = input.split(","); // move this up here  
     int intarray[] = new int[strarray.length]; 

     int count = 0; // Declare variables when they are needed not at the top of methods as there is no reason to allocate memory before it is ready to be used 
     for (count = 0; count < intarray.length; count++) { 
      intarray[count] = Integer.parseInt(strarray[count]); 
     } 

     for (int s : intarray) { 
      System.out.println(s); 
     } 
    } 
} 
+0

Chia cho 2 là có vì giả định rằng đối với mỗi số, có một dấu phẩy tương ứng.Tất nhiên, chúng tôi biết đây là một giả định sai lầm, nhưng tôi chắc chắn đó là dòng suy nghĩ của OP vào thời điểm đó. – corsiKa

-2

Something như thế này:

public static void main(String[] args) { 
    String N = "ABCD"; 
    char[] array = N.toCharArray(); 

    // and as you can see: 
    System.out.println(array[0]); 
    System.out.println(array[1]); 
    System.out.println(array[2]); 
    } 
+0

@Downvoters, ít nhất là bình luận lý do cho downvoting. –

7

Java 8 cung cấp một streams- dựa trên thay thế cho việc lặp lại thủ công:

int[] intArray = Arrays.stream(input.split(",")) 
    .mapToInt(Integer::parseInt) 
    .toArray(); 

Hãy sẵn sàng để bắt NumberFormatException nếu có thể cho đầu vào chứa chuỗi ký tự không thể chuyển đổi thành số nguyên.

Các vấn đề liên quan