2015-12-02 3 views
2

У меня есть код, который в основном читается из текстового файла. Когда он выводится, появляется знак «впереди», потому что ответ печатается в цикле. Как я могу избавиться от этого единственного знака «плюс»? Все, что я могу сделать, это преобразовать ENTRE THING в строку, а затем вывести первые три индекса, но это слишком сложно. Есть ли простой способ просто изменить логику и сделать это?Как избавиться от этого надоедливого знака плюс?

Мой код:

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package importtextfiles; 

/** 
* 
* @author Hana 
*/ 
import java.io.*; 
import java.util.*; 
public class InputNumData { 
    public static void main(String args[]) throws IOException 
    { 
     Scanner sf = new Scanner(new File("C:\\Users\\Hana\\SkyDrive\\CompSci\\Programming\\importTextFiles\\meow.txt")); 
     int maxIndx = -1; //so the first index is 0 

     String text[] = new String[1000]; 

     while(sf.hasNext()){ 
      maxIndx++; 
      text[maxIndx] = sf.nextLine(); 
      System.out.println(text[maxIndx]); 
     } 

     sf.close(); 

     String answer = ""; 
     int sum; 

     for(int j=0; j<=maxIndx; j++){ 
      Scanner sc = new Scanner(text[j]); 
      sum = 0; 
      answer = ""; 

      while(sc.hasNext()){ 
       int i = sc.nextInt(); 
       answer = answer + " + " + i; 
       sum = sum + i; 
      } 
      answer = answer + " = " + sum; 
      System.out.println(answer); 
     } 
    } 
} 

Мой выход:

run: 
12 10 3 5 
18 1 5 92 6 8 
2 9 3 22 4 11 7 
+ 12 + 10 + 3 + 5 = 30 
+ 18 + 1 + 5 + 92 + 6 + 8 = 130 
+ 2 + 9 + 3 + 22 + 4 + 11 + 7 = 58 
BUILD SUCCESSFUL (total time: 0 seconds) 

meow.txt:

12 10 3 5 
18 1 5 92 6 8 
2 9 3 22 4 11 7 

ответ

5

Просто измените эту строку

answer = answer.isBlank() ? i : answer + " + " + i; 

Для получения более подробной информации о том, как это работает, обратитесь this.

1

Потратьте время цикла, и зафиксировать первое значение:

//Set up first value 
int i = sc.nextInt(); //might want to check for hasNext() here 
answer = i; 
sum = sum + i; 

while(sc.hasNext()) 
{ 
    i = sc.nextInt(); 
    answer = answer + " + " + i; 
    sum = sum + i; 
} 
1

Прежде всего, не следует использовать конкатенацию в цикле. Что-то вроде:

String result = "" 
for (...) { 
    result = result + "some additonal data"; 
} 

Создает несколько объектов промежуточной строки, и это плохая практика. Его следует заменить на:

StringBuilder sb = new StringBuilder(); 
for (...) { 
    sb.append("some additional data"); 
} 
result = sb.toString(); 

Это позволяет добавлять строки без создания нового строкового объекта до тех пор, пока вы не закончите добавление.

Теперь, когда мы используем StringBuilder, у вас может быть несколько решений исходной плюс проблемы. Первый, который также будет работать с не рекомендованной конкатенацией строк, заключается в том, чтобы сохранить флаг, который сообщает вам, является ли это «первым операндом». Измените while петлю на:

StringBuilder sb = new StringBuilder(); 
boolean firstOperand = true; 

while(sc.hasNext()){ 
    int i = sc.nextInt(); 
    if (firstOperand) { 
     firstOperand = false; 
    } else { 
     sb.append(" + "); 
    } 
    sb.append(i); 
    sum = sum + i; 
} 
answer = sb.toString(); 

Другой путь, который возможен с StringBuilder, чтобы удалить лишнюю " + " после завершения цикла. В этом случае лучше добавить после каждого операнда, так что дополнительный будет в конце. Более эффективно удалять с конца StringBuilder по сравнению с его началом:

StringBuilder sb = new StringBuilder(); 

while(sc.hasNext()){ 
    int i = sc.nextInt(); 
    sb.append(i).append(" + "); 
    sum = sum + i; 
} 
if (sb.length() > 0) { 
    sb.setLength(sb.length() - 3); 
} 
answer = sb.toString(); 
Смежные вопросы