2017-04-15 115 views
2

請問您可以告訴我以下java代碼有什麼問題。使用while循環存儲數據的用戶輸入

我試圖通過Scanner類對象來收集來自用戶的輸入,然後通過使用而將其存儲在一個array但它是無限循環,如果我不提供break條件,所以我想給break當輸入等於「q」,但它沒有工作。

import java.util.*; 
public class ProjectOne{ 
    public static void main (String []arg){ 
     ArrayList one = new ArrayList(); 
     Scanner input = new Scanner(System.in); 
     System.out.println("Enter"); 
     String x = input.next();  
     while (input.hasNext()){ 
      if (x !="q"){ 
       one.add(input); 
      } 
      if (x == "q") 
      { 
       break; 
      } 
      System.out.println(one); 
     } 
    } 

} 
+0

*什麼是錯的下面的Java代碼*:這是不可讀的,因爲有各行之間4個空行,並且代碼是不縮進。不要發佈問題,直到它在預覽中看起來很完美。 –

+0

查看我的更新回答。我認爲這就是你要找的。 – strash

回答

1

你不==比較String。使用.equals()

if (!x.equals("q")){ 

if (x.equals("q")) 

注意:我認爲你沒有正確使用Scanner。你接受輸入,但繼續檢查x,而不是輸入。

0

不要比較字符串像x =="q"
使用.equals功能的java字符串比較。 用您的代碼替換您的代碼:x.equals("q") for x =="q"!x.equals("q") for x !="q"

0

您沒有從Scanner閱讀更新的值。在更正格式和其他錯誤之後,下面是更新的代碼供您參考。此外,而不是==標誌,使用字符串比較equals()方法 -

import java.util.*; 

public class ProjectOne{ 

public static void main (String []arg){ 

    ArrayList one = new ArrayList(); 
    Scanner input = new Scanner(System.in); 
    System.out.println("Enter"); 
    String x = null; 
    while (input.hasNext()) { 
     x = input.next(); 
     if (!x.equals("q")) { 
      one.add(x); 
     } 
     if (x.equals("q")){ 
      break; 
     } 
    } 
     System.out.println(one); 
} 
0

掃描儀會在您輸入之前讀取所有內容 - 您輸入的整行。

我認爲這是你需要的東西:

import java.util.ArrayList; 
import java.util.Scanner; 

public class ProjectOne 

{ public static void main (String []arg){ 
    ArrayList one = new ArrayList(); 
    Scanner input = new Scanner(System.in); 
    System.out.println("Enter"); 
    String pattern; 
    String x = input.next(); 
    while (true){ 
     String line = input.next(); 
     if(line.contains("q"))break; 
     else{ 
      x = x + " " + line; 
      } 
    } 
    System.out.println(x); 
}