2012-11-29 35 views
0

我試圖找出這個小問題:用戶輸入儘可能多的標記,但一旦輸入了小於0或大於100的標記,程序應該停下來找出進入的最大標記形式。在Array中添加值並找到java中最大的一個

我想獲得所有標記並將它們添加到數組(然後我發現使用ArrayList更好,所以我用它來代替)。

這裏是我到目前爲止有:

import java.util.*; 

... 
Scanner input = new Scanner(System.in); 
System.out.println("Enter your mark:"); 

int mark = input.nextInt(); 
List<String> list = new ArrayList<String>(); 
while (mark >= 0 && mark <= 100) 
{ 
    list.add(mark); 
} 

list.add(mark);給我錯誤說類似方法將INT沒有被發現。

我是新來的java,我不知道我是否正確理解arrayList。任何人都可以糾正我,如果我錯了?同樣,一旦我將數值添加到數組中,我會如何找到其中最大的數字?

回答

0

需要量:用戶輸入儘可能多的痕跡,因爲他/她想要的,但一旦標註小於0或大於100被輸入,程序就停止了,並找出已輸入的最大標誌形式的。

爲什麼要使用數組?如果你不使用的陣列所需,那麼這個片段將做的工作......

String instr; 
int val, maxval = 0; 
BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); 
while ((instr = input.readLine())!=null) { 
    val = Integer.parseInt(instr); 
    if (val < 0 || val > 100) break; 
    maxval = Math.max(maxval, val); 
} 
input.close(); 
System.out.println(maxval); 
1

首先,您聲明一個String ArrayList: -

List<String> list = new ArrayList<String>(); 

而且要添加到一個整數。編譯器會哭泣。將您的List聲明爲List<Integer>


其次,你應該更好地維護你輸入內容的List最大值每次,以避免以後的List使用search

所以,我會修改你的代碼: -

int maximum = -1; 
    int mark = input.nextInt(); 

    List<Integer> list = new ArrayList<Integer>(); 
    if (mark >= 0 && mark <= 100) { 

     if (maximum < mark) { 
      maximum = mark; 
     } 

     list.add(mark); 
    } 

現在我讓你到if轉換成do-while環,以便繼續詢問標記從用戶。

0

定義列表時,將其定義爲類型,然後將基本int添加到列表中。你需要確保這些匹配。

2

markint,您的列表保存爲String。您可以將其更改爲此

List<Integer> list = new ArrayList<Integer>(); 
if (mark >= 0 && mark <= 100) { 
    list.add(mark); 
} 

使其工作。

但是,你有一個無限循環!將while更改爲if即可解決該問題。

1

對於列表定義你有哪種類型的項目有內< >

變化

List<String> list = new ArrayList<String>(); 

List<Integer> list = new ArrayList<Integer(); 
1
List<Integer> list = new ArrayList<Integer>(); 
    do { 
     try 
     { 
     Integer mark = input.nextInt(); //get your input in the loop 
     list.add(mark); 
     } 
     catch(NumberFormatException exception) 
     { 
      exception.printStackTrace() ; 
     } 
    }while (mark >= 0 && mark <= 100); 

讓您在循環輸入,您可能需要使用do while循環,以便它至少運行一次。還假設用戶是惡意的,並會崩潰你的程序。所以,通過使用try catch block來準備這種情況。我只是使用printStackTrace,但顯示更好的錯誤消息。

+0

SRY,想要編輯我自己的答案;) – jlordo

+0

是啊,這很好:) –

+0

'名單'不可能的,你需要'列表'! – jlordo

0

下面是更正你需要做的:

1.You正在試圖創建一個整數列表,但您聲明Strings.You名單需要在使用整型(用於整數包裝類)聲明。列表不能用於原始類型。

List<Integer> list = new ArrayList<Integer>(); 

2.You正在輸入只有一次,並用它在循環的檢驗條件,由於其在輸入標記滿足你需要做的condition.What循環將持續運行,是把一個在循環中輸入語句。

Scanner input = new Scanner(System.in); 
    System.out.println("Enter your mark:"); 
    int mark = input.nextInt(); 
    int max=-1; 
    while (mark >= 0 && mark <= 100) { 
     list.add(mark); 
     if (max < mark) { 
     max = mark; 
    } 

     System.out.println("Enter your mark:"); 
     mark = input.nextInt(); 
    } 
相關問題